Кажется, существует проблема, используя литерал i в C++ с помощью std::complex.
Рассмотрим следующий код:
std::complex<double> a = -1.0i * 42.0;
std::complex<double> b = a + 1.0i;
Вторая строка не скомпилируется с: error: no match for 'operator+ (operand types are 'std::complex<double> and '__complex__ double)
Это также проявляется при использовании сложного литерала в вызовах функций, например
std::exp<std::complex<double>>( 1.0i * 3.14159 );
Почему сложный литерал 1.0i не конвертируется в std::complex<double>?
Должен ли я явно построить std::complex с 1.0i?