Приведенный ниже код не скомпилируется с помощью 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<float>&)((const std::complex<float>*)(& x))), ((const int&)((const int*)(&2)))) + y'
Я полагаю, что это связано с требованием Assignable, упомянутым здесь< /а>. Должен ли я определить свой собственный оператор присваивания копии для сложного? Если да, то как?
#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;
}
2.0f
или если вы используетеcomplex<double>
. Я не уверен, откуда gcc получаетdouble
, возможно, это ошибка. - person interjay   schedule 12.12.2011