c++ - 没有模板的 ADL

标签 c++ templates argument-dependent-lookup

可以给我一个不使用模板的 ADL 示例吗?从来没有见过这样的东西。我的意思是像 here .具体来说,我对导致上述一些陷阱的示例感兴趣。

编辑:

我认为 Tomalak 的回答可以延伸到陷阱。考虑一下:

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 将被调用,但取而代之的是调用另一个。

最佳答案

我无法向您展示导致陷阱的东西,但我可以展示ADL working without templates :

namespace foo {
   struct T {} lol;
   void f(T) {}
}

int main() {
   f(foo::lol);
}

注意lol的类型必须是class-type;如您所见,我最初尝试使用内置的,但没有成功。

关于c++ - 没有模板的 ADL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6685515/

相关文章:

c++ - 是否需要调用 CloseHandle?

c++ - 指向复数 <double> sin 的指针

c++ - 模板库中的名称查找 : why do we add this->

c++ - 为什么(不相关的)using 声明可以通过参数依赖查找调和重载歧义?

c++ - Visual Studio 2013 中的 "unresolved external symbol"错误

C++ 子线程抛出异常

c++ - std::set 包含对与自定义​​比较器

c++ - 使用模板对象的模板函数中无法识别的内容

c++ - 模板类和嵌套类 C++

c++ - 自定义点和 ADL