在C++98中,模板的实参类型有限制,即局部类型和匿名类型不能作为模板实参。
1 template <typename T> class X{}; 2 template <typename T> void TempFun(T t){} 3 struct A{} a; 4 struct {int i;} b; // b是匿名类型变量 5 typedef struct {int i;} B; // B是匿名类型 6 7 void fun() { 8 struct C{} c; // C是局部类型 9 X<A> x1; 10 X<B> x2; 11 X<C> x3; 12 TempFun(a); 13 TempFun(b); 14 TempFun(c); 15 }
编译结果如下:
可以看到,使用c++98编译时,局部类型,匿名类型都无法作为模板实参,这些限制都是没有任何意义的,所以c++11作了改进,以上代码在c++11中编译是OK 的。