是否允许将类模板类型参数键入相同的名称?

时间:2016-06-27 21:08:56

标签: c++ templates typedef

这似乎可以编译甚至在MSVC中按预期工作。但它是合法的C ++代码,是否保证在此处执行预期的操作(即,将模板类型导出到同名的结构用户)?

template <typename EnumType>
struct Enum
{
   // There are two hard problems in CS: cache invalidation and naming things.
   typedef EnumType EnumType;
};

1 个答案:

答案 0 :(得分:2)

我认为不允许使用类型定义。

14.6.1本地声明的名称(N4296)

  

6模板参数不得在其范围内重新声明   (包括嵌套作用域)。模板参数的名称不能与   模板名称。 [例如:

 
template<class T, int i> class Y { 
   int T;  // error: template-parameter redeclared 
   void f() { 
       char T; // error: template-parameter redeclared 
   }
}; 

template<class X> class X;  // error: template-parameter redeclared
     

- 结束示例]

typedef EnumType EnumType是将template-parameter重新定义为typedef-name。