C++ 我们可以专门化类模板的枚举(类型)成员吗?

C++ 我们可以专门化类模板的枚举(类型)成员吗?,c++,enums,C++,Enums,声称,除其他外,您可以专门化 类模板的成员枚举 由于没有提供示例,我试图猜测如何做到这一点 我最终得出以下结论: template <typename T> struct A { enum E : int; }; template <> enum A<int>::E : int {a,b,c}; MSVC(带有/std:c++最新版本的v19.20)也会拒绝带有 error: template specialization of 'enum A&l

声称,除其他外,您可以专门化

  • 类模板的成员枚举
  • 由于没有提供示例,我试图猜测如何做到这一点

    我最终得出以下结论:

    template <typename T> struct A
    {
        enum E : int;
    };
    
    template <> enum A<int>::E : int {a,b,c};
    
    MSVC(带有
    /std:c++最新版本的v19.20)也会拒绝带有

    error: template specialization of 'enum A<int>::E' not allowed by ISO C++ [-Wpedantic]
    
    error C3113: an 'enum' cannot be a template
    

    我是否正确地专门化了枚举?如果没有,现在我可以这样做吗?

    在([temp.expl.spec]/6)中有一些示例表明您所拥有的是正确的。其中一个示例是:

    template<> enum A<int>::E : int { eint };           // OK
    
    模板枚举A::E:int{eint};//确定
    

    看起来像是一个gcc错误。

    这个Q/a可能有助于提供一些见解:gcc在相关情况下也会失败,在这种情况下,专门化是在类模板上执行的,而不是在成员或它上执行的,但是MSVC管理这种变化:有一个错误报告:供参考:(也适用于C++)