c – 为什么这个函数调用没有歧义?
我想知道为什么这个函数调用没有歧义:
#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:
因此,首选过载是优选的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |