我对 [namespace.udir]p2 的含义有点困惑。考虑以下程序:
namespace X { int i = 1; }
namespace Y { using namespace X; }
int main() { i = 2; }
在它的i
主要名称查找失败(我尝试使用 GCC、Clang 和 Visual c++)。这似乎与 [namespace.udir]p2 ( http://eel.is/c++draft/dcl.dcl#namespace.udir-2 ) 不一致:
using-directive 指定指定命名空间中的名称可以在 using-directive 出现在 using-directive 之后的范围内使用。在非限定名称查找 ([basic.lookup.unqual]) 期间,名称看起来好像它们是在最近的封闭命名空间中声明的,其中包含使用指令和指定命名空间。[注:在此上下文中,“包含”是指“直接或间接包含”。——尾注]
在我的程序中,我将这个规则应用于由ini
声明的 name ,方式如下:int i = 1;
X
使用指令:
using namespace X;
指定的命名空间:
X
最近的封闭命名空间:全局命名空间
这是否意味着i
in的非限定名称查找main
应该找到X::i
?为什么我尝试的三个编译器都没有得到这个结果?