使用G ++声明嵌套枚举

时间:2014-10-12 02:14:28

标签: gcc c++11 forward-declaration

以下代码无法使用g ++进行编译:

class MyClass {
  public:
    enum MyEnum : int;
};

enum MyClass::MyEnum : int {
  Value1;
};

int main()
{
  auto i = MyClass::Value1;
}

它会生成错误:

"MyClass::EnumValue Value1 is private within this context"

使用clang和MSVC 2012编译代码很好。

但是,如果您要完全限定枚举值:

int main()
{
  auto i = MyClass::EnumValue::Value1;
}

使MyClass成为结构:

struct MyClass {
  public:
    enum MyEnum : int;
};

代码用g ++编译。

看起来我正在遇到这个编译器错误:https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49604但似乎很难相信那些基本的东西可能在g ++中没有固定为> 3年。

那么,我是否误解了规范? GCC错误吗?其他编译器是错误的吗?我想确保我的代码尽可能正确和便携。

0 个答案:

没有答案