什么是模板上下文中的成员枚举?
What is a member enumeration in context of templates?
C++20 标准 (N4892) 指出:
The declaration in a template-declaration (if any) shall
[...]
(2.2) — define [...] a member enumeration, [...]
(13.1.2)
在此上下文中,成员枚举是什么意思?我查看了标准,但找不到该术语的定义,只能找到它的用法。在 13.9.2.3.(1/2) 中提到了范围内和非范围内的成员枚举。所以我假设枚举就是它的意思。但是,我无法在 MSVC 中创建成员枚举模板:
struct S
{
template<typename T>
enum class e
{
i = 0,
};
};
C3113: 'enum' 不能是模板
我也从未在野外见过枚举模板,所以我认为这是不可能的。那么模板上下文中的“成员枚举”是什么意思?
However, I was unable to create a member enum template in MSVC:
因为这不是故意的。现在存在的 C++ 标准中没有枚举模板。考虑而不是 class 模板的前向声明范围成员枚举:
template <typename T>
class Foo { enum class bar; };
template <typename T>
enum class Foo<T>::bar { baz };
这是声明在模板声明中的一个例子,它是一个枚举的定义,这是一个例子[temp.pre] 2.2.
涵盖的用例
C++20 标准 (N4892) 指出:
The declaration in a template-declaration (if any) shall [...] (2.2) — define [...] a member enumeration, [...]
(13.1.2)
在此上下文中,成员枚举是什么意思?我查看了标准,但找不到该术语的定义,只能找到它的用法。在 13.9.2.3.(1/2) 中提到了范围内和非范围内的成员枚举。所以我假设枚举就是它的意思。但是,我无法在 MSVC 中创建成员枚举模板:
struct S
{
template<typename T>
enum class e
{
i = 0,
};
};
C3113: 'enum' 不能是模板
我也从未在野外见过枚举模板,所以我认为这是不可能的。那么模板上下文中的“成员枚举”是什么意思?
However, I was unable to create a member enum template in MSVC:
因为这不是故意的。现在存在的 C++ 标准中没有枚举模板。考虑而不是 class 模板的前向声明范围成员枚举:
template <typename T>
class Foo { enum class bar; };
template <typename T>
enum class Foo<T>::bar { baz };
这是声明在模板声明中的一个例子,它是一个枚举的定义,这是一个例子[temp.pre] 2.2.
涵盖的用例