考虑以下代码:
namespace A
{
int i = 24;
}
namespace B
{
using namespace A;
int i = 11;
int k = i; // finds B::i, no ambiguity
}
Run Code Online (Sandbox Code Playgroud)
§6.4.1非限定名称查找[basic.lookup.unqual]
- using-directive提名的命名空间中的声明在包含using-directive的命名空间中可见; 见[namespace.udir].出于[basic.lookup.unqual]中描述的非限定名称查找规则的目的,using-directive指定的命名空间中的声明被视为该封闭命名空间的成员.
对我来说,标准说很清楚,对于不合格的名称查找(的目的i中int k = i)的声明,i从A被认为是成员B所以i应该是暧昧int k = i,不过双方gcc并clang 编译和解决i的地方B::i.我搜索了标准(basic.scope.hiding和namespace.udir),并没有找到与上述内容相矛盾的例外或规则.我发现对于限定名称查找,但不是对于非限定名称查找.
为什么i明确无误?