C++03 では、ローカル型と無名型はテンプレート引数として使用することはできませんでした。
(使用できるコンパイラはあるけど)
template <class T> void foo(T t) {} enum { e }; struct { } noname; int main() { struct local { } a; foo(a); // エラー! foo(e); // エラー! foo(noname); // エラー! }
C++0x ではこの制限がなくなります。
追記:
これがあると、以下のように、vectorの要素型にローカル型を指定できたりします。
int main() { struct local { string name; int age; }; vector<local> v; }
N2657 Local and Unnamed Types as Template Arguments