在限定的声明符-id之后查找名称

Name lookup after qualified declarator-id

本文关键字:之后 查找 -id 声明      更新时间:2023-10-16

Sec。3.4.3/3表示:

在声明符id是限定id的声明中,名称在定义命名空间范围;将查找限定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。这是打字错误吗?

据我所知,这个例子是正确的,直接从例子前面的段落开始:

在声明符id是限定id的声明中,命名在声明限定id之前使用的在定义命名空间范围;

因此,找到的X将是::X而不是C::X,因为它在合格id 之前

和:

合格id后面的名称被查找在成员的类或命名空间的范围内

所以number将是C::number,因为它在限定id之后。