考虑这个函数调用:
foo::bar();
11.3.1.1.1,第 3 段 [over.call.func] ( N4778 ) 涵盖了这种情况:
在非限定函数调用中,名称不由
->
or.
运算符限定,并且具有更通用的primary-expression 形式。按照函数调用中名称查找的正常规则,在函数调用的上下文中查找名称...
在这里,foo::bar
是一个不合格的名称,因为它没有被->
or.
限定。所以本段适用。现在,短语“在上下文中查找”的含义在 6.4 第 2 段 [basic.lookup] 中进行了解释:
“在表达式的上下文中查找”的名称在找到表达式的范围内被查找为非限定名称。
但是, 是名称查找领域中foo::bar
的限定名称。也就是说,这个组合的段落基本上就是说,限定名是按照非限定名查找规则来查找的。但是,我不认为不合格的名称查找能够递归地进入更窄的范围,即to 。这是缺陷吗?foo::bar
foo
bar