我正在尝试理解使用嵌套名称说明符定义的枚举。标准所说的是N4296:7.2/4 [dcl.enum]
:
如果enum-key后跟一个嵌套名称说明符,则为 枚举说明符应指先前的枚举 直接在类或名称空间中声明的 nested-name-specifier指(即,既不继承也不引入 by using-declaration ),enum-specifier应出现在 封闭前一个声明的命名空间。
那么,为什么以下示例有用呢?
#include <iostream>
namespace A
{
namespace B
{
enum E : int;
}
}
namespace C
{
using A::B::E;
}
enum C::E : int { x = 2 };
int main()
{
}
在namescape C
中,我们使用声明声明enum E
,然后使用枚举定义引用它。编译器可能抛出了错误,但事实并非如此。出了什么问题,哪里有误会?
答案 0 :(得分:2)
显然,由于你给出的原因,这是一个编译器错误 有趣的是,Clang 3.5.0和GCC 4.9都接受该程序。