class A {
public: enum class { HELLO, WORLD };
};
众所周知,在class
内,声明一个简单的enum
(而不是enum class
)是一个更好的主意,因为它已经使用class
标识进行了输入。但仍然以上语句是有效的C++0x
签名。现在如何在外面访问未命名的enum class
?
int i = A::HELLO; // error: ‘HELLO’ is not a member of ‘A’
答案 0 :(得分:8)
实际上,这是无效的。 C ++ 0x FDIS说(9.2p1)
除了用于声明朋友(11.3)或将基类成员的名称引入派生类(7.3.3)之外,成员声明声明了该类的成员,并且每个这样的成员声明应声明该类的至少一个成员名称。
在您的情况下,类的范围中不引入枚举器名称,也不引入枚举名称。因此,该成员声明根本不会引入任何成员名称。
编辑:实际上,更直接地禁止了枚举声明。 7.2p2:
在范围枚举的声明中,不应省略可选的标识符。