N4140 第 53 页的脚注 (33):
忽略函数名称的查找包括出现在嵌套名称说明符、详细类型说明符或 基本说明符中的名称。
N4140 第 53 页的脚注 (33):
忽略函数名称的查找包括出现在嵌套名称说明符、详细类型说明符或 基本说明符中的名称。
namespace A
{
void std();
void foo()
{
std::cout << "Hello World"; // (1)
}
};
在(1)中,std
不能命名函数,因此A::std
在查找过程中会忽略该函数,并且代码会编译。
[basic.lookup.qual]/1 中明确提到了此规则:
如果嵌套名称说明
::
符中的范围解析运算符前面没有decltype-说明符,则查找前面的名称,仅考虑名称空间、类型和特化为类型的模板。::
列表中的另一个示例包括
class A : B {};
在这里,B
不能指定函数,因此B
在查找过程中将忽略任何调用的函数。同样适用
class A a;
哪里A
不能命名一个函数。