我想知道为什么这个函数调用没有歧义:
#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/