Gcc 用G++;

Gcc 用G++;,gcc,c++11,forward-declaration,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进行良好

以下代码无法使用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
a结构:

struct MyClass {
  public:
    enum MyEnum : int;
};
这段代码是用g++编译的

看起来我遇到了这个编译器错误:但似乎很难相信如此基本的东西在g++中被修复了3年以上


那么,我是不是误解了规格?GCC出错了吗?其他编译器是否出错?我想确保我的代码尽可能正确和可移植。

因此代码是正确的,现在可以使用gcc 7或更高版本进行编译。在gcc 7中修复了该错误。