以下代码无法使用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错误吗?其他编译器是错误的吗?我想确保我的代码尽可能正确和便携。