我想知道为什么这个函数调用没有歧义:

#include <iostream>
#include <vector>

template <class T>
class C
{
public:
    typedef char c;
    typedef double d;

    int fun() {}

    static c testFun( decltype(&C::fun) ) {return c();}
    static d testFun(...) { return d(); }
};

int main() {
    C<int>::testFun(0); // Why no ambiguity?
}

http://coliru.stacked-crooked.com/a/241ce5ab82b4a018

最佳答案

您有标准转换与省略号转换。标准说标准转换是比后者更好的转换序列。 [over.ics.rank]/p2:



指针到成员的转换是标准的转换序列。 0 是一个空指针常量,可以转换为指向成员的指针。 [conv.mem]/p1:



因此首选第一个过载。

关于c++ - 为什么在这个函数调用中没有歧义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29516653/

10-11 12:21