我试图为这个问题写一个简单的解决方案:数组衰减到指针和重载解析
很明显,在原文中,两个重载都具有相同的转换强度(精确匹配),因此首选非模板。事实上,如果我将另一个更改为模板,调用就会变得模棱两可:
struct stg
{
template<typename T = void>
stg(const char* const& c_str, T* = 0);
template<int N>
stg(const char (&str) [N]);
};
所以我想引入一个用户定义的转换,这将比第二个重载的精确匹配更差。
struct stg
{
template<typename> struct cvt { operator int() { return 0;} };
template<typename T = void>
stg(const char* const& c_str, int = cvt<T>());
template<int N>
stg(const char (&str) [N]);
};
但是g++ 说这仍然是模棱两可的。为什么默认参数中的自定义转换不影响重载排名?