有人可以向我展示一个不使用模板的 ADL 示例吗?从来没有见过这样的事情。我的意思是这里。具体来说,我对导致某些陷阱的示例感兴趣,例如提到的。
编辑:
我认为托马拉克的答案可以扩展到陷阱。考虑一下:
namespace dupa {
class A {
};
class B : public A {
public:
int c;
B() {
}
};
void f(B b) {
printf("f from dupa called\n");
}
}
void f(dupa::A) {
printf("f from unnamed namespace called\n");
}
int main()
{
dupa::B b;
f(b);
return 0;
}
在这里,我们期望调用来自未命名命名空间的 f,而是调用另一个命名空间。