繁体   English   中英

C ++两阶段查找成员函数的相关非限定名称

[英]C++ two-phase lookup for dependent unqualified name of member function

Josuttis和Vandervoorde提到,对于从属不合格名称,编译器在第一阶段应用普通查找,在第二阶段应用ADL。 然后,它结合了过载设置。 像这样:

struct B{};

void bar(int){} // first overload

template <class T>
void foo(T t)
{
  bar(2, t);
}

void bar(int, B){} // second overload

int main() {
    foo(B{}); // works just fine, calls second overload
}

但是,如果从属名称是成员函数的名称,则此原理不起作用:

struct B{};

struct A{
  template <class T>
  void foo(T t)
  {
    bar(2, t);
  }

  void bar(int){} // first overload
};

void bar(int, B){} // second overload

int main() {
  A a;
  a.foo(B{}); // gives error
}

为什么? 我想知道是否有人可以指出标准的注释

我在标准3.4.2中找到了一条声明:

令X为不合格查询产生的查询集,令Y为参数依赖查询产生的查询集。 如果X包含:

  • 集体成员的声明,或

  • 不是使用声明的块范围函数声明,或者

  • 既不是函数也不是函数模板的声明

那么Y为空。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM