这似乎可以编译甚至在MSVC中按预期工作。但它是合法的C ++代码,是否保证在此处执行预期的操作(即,将模板类型导出到同名的结构用户)?
template <typename EnumType>
struct Enum
{
// There are two hard problems in CS: cache invalidation and naming things.
typedef EnumType EnumType;
};
答案 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。