[英]How to make an overloaded function a dependent name, so two-phase lookup finds it?
[英]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.