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

时间:2019-05-24 23:17:28

标签: c++ enums

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

  
      
  1. 班级模板的成员枚举
  2.   

由于未提供示例,因此我试图猜测如何做到这一点。

我最终得到以下内容:

template <typename T> struct A
{
    enum E : int;
};

template <> enum A<int>::E : int {a,b,c};

Clang(带有-std=c++17 -pedantic-errors的8.0.0)进行编译。

GCC(带有-std=c++17 -pedantic-errors的9.1)拒绝使用

的代码
error: template specialization of 'enum A<int>::E' not allowed by ISO C++ [-Wpedantic]

MSVC(带有/std:c++latest的v19.20也拒绝使用

error C3113: an 'enum' cannot be a template

Try it on gcc.godbolt.org

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

1 个答案:

答案 0 :(得分:2)

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

template<> enum A<int>::E : int { eint };           // OK

好像是gcc错误。