什么是模板上下文中的成员枚举?

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:“枚举”不能是模板

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

回答

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

因为这不是故意的。现在现有的 C++ 标准中没有枚举模板。考虑而不是类模板的前向声明范围成员枚举:

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

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

这是一个的情况下声明在一个模板声明它是一个枚举,这是一个用例所涵盖的实施例的定义[temp.pre] 2.2。


以上是什么是模板上下文中的成员枚举?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>