Сложный литерал 'i', используемый в аргументе функции

Кажется, существует проблема, используя литерал 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?

Ответ 1

Вы должны перекомпилировать с --std=c++14 (без GNU ext), чтобы избежать конфликта суффикса i с расширением gcc

Библиотека ISO С++ 14 также определяет суффикс i, поэтому код С++ 14, который включает заголовок <complex> не может использовать 'i для расширения GNU. Суффикс "j" по-прежнему имеет значение GNU.