【问题标题】:What is a member enumeration in context of templates?什么是模板上下文中的成员枚举?
【发布时间】:2021-09-23 09:28:46
【问题描述】:

C++20 标准 (N4892) 规定:

模板声明中的声明(如果有)应 [...] (2.2) — 定义 [...] 成员枚举,[...]

(13.1.2)

在这种情况下,成员枚举是什么意思?我查看了标准,但找不到这个术语的定义,只有它的用法。在 13.9.2.3.(1/2) 中提到了作用域和非作用域的成员枚举。所以我认为枚举就是它的意思。但是,我无法在 MSVC 中创建成员枚举模板:

struct S
{
    template<typename T>
    enum class e
    {
        i = 0,
    };
};

C3113: 'enum' 不能是模板

我也从未在野外见过枚举模板,所以我认为这是不可能的。那么模板上下文中的“成员枚举”是什么意思呢?

【问题讨论】:

    标签: c++ templates enums language-lawyer c++20


    【解决方案1】:

    但是,我无法在 MSVC 中创建成员枚举模板:

    因为这不是故意的。在现有的 C++ 标准中没有枚举模板。想想而不是类模板的前向声明的作用域成员枚举:

    template <typename T>
    class Foo { enum class bar; };
    
    template <typename T>
    enum class Foo<T>::bar { baz };
    
    

    这是 template-declaration 中的 declaration 的一个例子,它是一个枚举的定义,它是 [temp.pre] 2.2 涵盖的用例的示例.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-21
      • 1970-01-01
      • 2018-11-05
      • 2014-04-22
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2018-01-13
      相关资源
      最近更新 更多