【发布时间】:2016-11-10 20:47:30
【问题描述】:
cppreference.com (http://en.cppreference.com/w/cpp/types/enable_if#Notes) 指出:
一个常见的错误是声明两个仅在默认模板参数上有所不同的函数模板。这是非法的,因为默认模板参数不是函数模板签名的一部分,并且使用相同的签名声明两个不同的函数模板是非法的。
struct T { enum { int_t,float_t } m_type; template <typename Integer, typename = std::enable_if_t<std::is_integral<Integer>::value> > T(Integer) : m_type(int_t) {} template <typename Floating, typename = std::enable_if_t<std::is_floating_point<Floating>::value> > T(Floating) : m_type(float_t) {} // error: cannot overload };
确实如此……那么解决这个问题的正确方法是什么,并实际实现上述错误代码未能实现的目标?
【问题讨论】: