枚举通过声明引入

时间:2014-12-27 03:17:33

标签: c++ enums

我正在尝试理解使用嵌套名称说明符定义的枚举。标准所说的是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()
{ 
}

DEMO

namescape C中,我们使用声明声明enum E,然后使用枚举定义引用它。编译器可能抛出了错误,但事实并非如此。出了什么问题,哪里有误会?

1 个答案:

答案 0 :(得分:2)

显然,由于你给出的原因,这是一个编译器错误 有趣的是,Clang 3.5.0和GCC 4.9都接受该程序。