g ++ 4.5中std :: complex的C ++ 11拷贝分配 - 与'operator +'不匹配

时间:2011-12-12 17:33:04

标签: c++ operator-overloading c++11 complextype

以下代码无法使用-std=c++0x开关使用g ++版本4.5.0进行编译。我收到以下错误消息:

error: no match for 'operator+' in 'std::pow [with _Tp = float, _Up = int, typename __gnu_cxx::__promote_2<_Tp, _Up>::__type = double](((const std::complex<float>&)((const std::complex<float>*)(& x))), ((const int&)((const int*)(&2)))) + y'

我认为这与提到here可分配要求有关。我应该为复杂定义我自己的复制赋值运算符吗?如果是这样,怎么样?

#include <complex>
using namespace std;

int main(int argc, char *argv[]) {
  complex<float> x,y;
  x = pow(x,2);      // ok
  x = x        + y;  // ok
  x = pow(x,2) + y;  // error
  return 0;
}

1 个答案:

答案 0 :(得分:11)

[cmplx.over] / p3指定涉及powcomplex的其他重载:

  

功能模板pow应具有足够的额外过载   对于至少有一个类型为complex<T>的参数的调用,请确保:

     
      
  1. 如果任一参数的类型为complex<long double>或类型为long double,则两个参数都会有效地转换为complex<long double>

  2.   
  3. 否则,如果任一参数具有类型complex<double>double或整数类型,则两个参数都被有效地转换为   complex<double>

  4.   
  5. 否则,如果任一参数的类型为complex<float>float,则两个参数都有效地转换为complex<float>

  6.   

2正在升级为双倍,pow(complex<float>, double)会返回complex<double>