秒。 3.4.3 / 3说:
在declarator-id是qualified-id的声明中,名称 在声明的qualified-id被查找之前使用 定义名称范围;查看qualified-id后面的名称 在成员的类或命名空间的范围内。
3.4.3 / 3 N3797中有一个代码示例:
class X { };
class C {
class X { };
static const int number = 50;
static X arr[number];
};
X C::arr[number];// ill-formed:
// equivalent to: ::X C::arr[__C::number__];
// not to: C::X C::arr[__C::number__];
但我认为这不是真的,因为X C::arr[number]
中使用的非限定名称可以在封闭范围内找到,但X C::arr[C::number]
不会搜索封闭范围中的number
。这是一个错字吗?
答案 0 :(得分:2)
据我所知,例子是正确的,直接来自示例前的段落:
在declarator-id为qualified-id,名称的声明中 在声明的qualified-id 之前使用在 定义命名空间范围;
所以找到的X
将是::X
而不是C::X
,因为它位于qualified-id
和
名称以后的名称已查找 在成员的类或命名空间范围内
所以number
将是C::number
,因为它位于qualified-id。