Назначение копии C ++ 11 для std :: complex в g ++ 4.5 - нет соответствия для 'operator +'

Приведенный ниже код не может быть скомпилирован с g ++ версии 4.5.0 с использованием переключатель -std = c ++ 0x . Я получаю следующее сообщение об ошибке:

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&)((const std::complex*)(& x))), ((const int&)((const int*)(&2)))) + y'

Я считаю, что это связано с требованием Assignable , упомянутым здесь . Должен ли я определять собственный оператор присваивания копии для сложного? Если да, то как?

#include 
using namespace std;

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

6
задан Community 23 May 2017 в 12:20
поделиться