4

N4140 第 53 页的脚注 (33):

忽略函数名称的查找包括出现在嵌套名称说明符详细类型说明符基本说明符中的名称。

4

1 回答 1

7
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不能命名一个函数。

于 2015-01-29T17:03:08.407 回答