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 包含:
集体成员声明,或
不是 using 声明的块作用域函数声明,或
- 既不是函数也不是函数模板的声明
则 Y 为空。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在C++中查找文件
- 如何在 c++98 中通过特定字段在 QList 中查找对象?
- 如何使用 Clang 查找所有成员字段读/写?
- 查找哪个代码段比另一个代码段快
- 动态链接到 c++ 静态成员字段时符号查找失败
- 从地址中查找堆或堆块或段
- 我哪里错了?对名称Node的查找查找结构Node的注入类名
- 为什么这个依赖名称查找查找的是全局标识符而不是方法
- 如何在C++中编写一段代码以查找系统路径上文件的完整路径
- 通过 2 个字段查找特定对象的向量元素
- 如何查找和填充第三方源的 Flash 字段
- 您查找段错误原因的方法是什么?
- 查找无序后继递归代码中的段错误
- 在类文件和缓冲区中查找段故障
- 在这段代码中查找3个错误,这些错误都会导致无限循环
- 在容器中查找具有给定字段最小值的元素的最紧凑的方法
- 非限定名称查找查找内联命名空间成员
- 修改二进制查找查找然后删除
- 为什么非限定名称查找查找所有重载声明