为什么限定名称查找会找到未作用域的枚举器?

时间:2014-12-26 07:07:25

标签: c++ enums

部分N4296::7.2/11 [dcl.enum]

  

每个枚举名称和每个未作用域的枚举器都在作用域中声明   它立即包含枚举说明符。每个范围的枚举器   在枚举范围内声明。这些名字遵守   范围规则为(3.3)和(3.4)中的所有名称定义。

所以这意味着,未编译的枚举数不会在枚举范围内声明,而是在范围内声明,立即包含它们。那么,为什么限定名称查找会找到这样的枚举器?

#include <iostream>

enum A{ x = -2, y = 2 };

int a = x;

int b = A::y; //OK, but it's not clear why?

int main()
{ 
    std::cout << b << std::endl; 
}

DEMO

1 个答案:

答案 0 :(得分:2)

这是标准中的一项特殊规则。

  

以提名枚举类型的 nested-name-specifier 为前缀的名称应代表该枚举的枚举数。

(C ++ 11 [basic.lookup.qual] / 5; N4296中相同)