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

相关文章:

  • 2022-01-18
  • 2022-12-23
  • 2021-11-28
  • 2022-01-29
  • 2022-12-23
  • 2021-06-01
  • 2022-12-23
  • 2021-09-28
猜你喜欢
  • 2021-05-27
  • 2021-07-14
  • 2021-11-11
  • 2021-08-22
  • 2021-12-11
  • 2021-07-24
相关资源
相似解决方案