【发布时间】:2016-02-29 08:40:48
【问题描述】:
枚举类型声明的意义何在?它是否紧跟在枚举名称之后?我看到了标准 C++ 14 (n4296) §3.3.2/3:
枚举的声明点紧跟在 枚举说明符(7.2)或其第一个中的标识符(如果有) opaque-enum-declaration (7.2),以先到者为准
但是当我尝试复制它时;
template <class T>
struct CL
{
using UndType = int;
};
enum class E: CL<E>::UndType; //error: E is undefined
我在所有编译器上都遇到了错误,尽管用于枚举 E 的 enum-base 放在标识符之后并且必须可见。
【问题讨论】:
-
我会说它位于 opaque-enum-declaration 的
;(// error之前)。 -
所以在
CL<E>,E确实还没有声明:( -
Jarod42,但是为什么还没有声明呢?标准说它紧跟在标识符之后,不是吗?没看懂
-
@Jarod42 语法是enum-key attribute-specifier-seq identifier enum-base,所以OP中的引用中提到的identifier在这种情况下似乎是
E,不是吗?您示例中的identifier不是 enum-specifier 的一部分。 -
我发现了一个缺陷报告:open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#1482。因此,在 enum-base(即 ":CL
::UndType")中,枚举 E 必须已经被声明并且是一个不完整的类型
标签: c++ c++11 enums declaration c++14