函数名称查找ADL的一个问题,和我预想的不太一样.
下面这段代码是从网上摘下来的的,我自己做了一点修改。在名称空间X里面加入了一个我的函数f。我本来期待f(N::)的时候调用的是我的函数,但是还是调用的N::里面的f
namespace X{ template<typename T> void f(T); void f(int){ // 我新加的函数,为什么没有匹配? std::cout << "X::f\n"; }}namespace N{ using namespace X; enum E { e1 }; void f(E){ std::cout << "N::f(N::E) called\n"; }}void f(int){ std::cout << "::f(int) called\n"; }int main(){ ::f(N::e1); // qualified function name: no ADL f(N::e1); // ordinary lookup finds ::f() and ADL finds N::f(),} // the latter is preferred