【发布时间】:2017-12-06 17:28:04
【问题描述】:
我想在对复数求和时允许隐式转换。 例如:
complex<double> a;
complex<long double> b;
int i;
auto sum = a + b; // (1)
auto SUM = a + i; // (2)
感谢回答implicit type promotion in summing two complex<>,我有启用转换的代码 (1) 为了启用(2)转换,我使用了 enable_if_t
template <typename T, typename U>
auto operator +(const ::std::complex<T> &a, std::enable_if_t<std::is_arithmetic<U>::value, U> &b)
{
typedef decltype(::std::declval<T>() + ::std::declval<U>()) comcomp_t;
typedef ::std::complex<comcomp_t> result_t;
return ::std::operator +(result_t{a}, result_t{b});
}
但是,我收到一个编译错误,提示“无法推断模板参数 'U'。我想我对 SFINAE 的理解很浅。任何帮助将不胜感激。谢谢
【问题讨论】:
-
请阅读此“这需要 C++14 用于 'auto'(又名推导)返回类型。对于 C++11,您基本上必须在运算符中重复 decltype 表达式返回类型。”在其中一个答案中。
-
我将 c++14 标志传递给编译器。我编辑了标签。谢谢