使用 C++11 的强类型 enum
,可以像这样声明一个类的成员枚举:
class X {
public:
enum class E;
};
enum class X::E { a, b };
然而,当将X
变为类模板时:
template <typename T>
class X {
public:
enum class E;
};
template <typename T>
enum class X<T>::E { a, b };
gcc 4.7.2和clang 3.0都会出现"error: ‘enum X::E’ is an enumeration template [-pedantic]"和"error: enumeration cannot be a template"错误。我认为相关的标准部分是§14 Templates,该部分的第一段如下所述:
在template-declaration中的声明应该:
- 声明或定义函数或类,或 - 定义类模板或嵌套在类模板内的类的静态数据成员,成员函数、成员类或成员枚举,或 - 定义类或类模板的成员模板,或 - 作为别名声明。
(强调是我的)。所以这是编译器问题吗,还是我完全误解了陈述?
-pedantic-errors
编译器标志吗? - Constructor