局部和匿名类型作模板实参

在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 的。

原文地址:https://www.cnblogs.com/lniwn/p/3404520.html