我从§14.7.3/6 [temp.expl.spec]
分解了以下示例,该示例在主模板中定义了一个类成员枚举,然后对其进行了专门化。以下内容无法在clang中编译:
template<class T>
struct A {
enum E : T;
};
template<class T>
enum A<T>::E : T { eT };
template<>
enum A<char>::E : char { echar }; // ill-formed, A<char>::E was instantiated
// when A<char> was instantiated
// error: explicit specialization of 'E' after instantiation
原因可能是未专门作用的成员枚举的定义是在专门化之前实例化的。 14.7.1 [temp.inst]/1:
我试图了解为什么这正是一个问题。是因为如果枚举已经有了定义,那么在特化过程中会导致重新定义错误?
最佳答案
您需要专门研究整个类的定义:
template<class T>
struct A {
enum E : T { eT };
};
template<>
struct A<char> {
enum E : char { echar };
};
关于c++ - 主模板中类成员的定义以及特化过程中的隐式实例化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25351809/