我正在用 clang 编译以下测试代码:
template<typename T> struct S1
{
struct S2{
enum class E1;
enum class E2: T;
enum class E3: short;
};
typename S2::E1 b1;
typename S2::E2 b2;
typename S2::E3 b3;
enum class S1::S2::E1 {e11,e12};
enum class S1::S2::E2 : T {e21,e22};
enum class S1::S2::E3 : short {e31,e32};
};
template struct S1<int>;
我收到错误:模板专业化或定义需要一个与嵌套类型“S1< T >”相对应的模板参数列表。我的猜测是因为在添加成员时定义了 struct S1
enum class S1::S2::E1 {e11,e12}
enum class S1::S2::E2 : T {e21,e22};
enum class S1::S2::E3 : short {e31,e32};
编译器不知道 T 是什么,因为 S1 尚未实例化,因此 T 无法解析。因此,编译器不知道枚举成员的大小,因此会引发错误。它是否正确?标准中有规定吗?
注意:gcc 不会抛出任何此类错误。