Сложный литерал '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.