_std::complex
_を使用してC++で literal i
を使用すると、問題があるようです。
次のコードについて考えてみます。
_std::complex<double> a = -1.0i * 42.0;
std::complex<double> b = a + 1.0i;
_
2行目は次のコマンドでコンパイルに失敗します: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
_を明示的に作成する必要がありますか?
i
サフィックスと gcc extension の競合を避けるために、--std=c++14
(no GNU ext)で再コンパイルする必要があります。
ISO C++ 14ライブラリは「i」サフィックスも定義しているため、
<complex>
ヘッダーを含むC++ 14コードはGNU拡張子に 'i'を使用できません。 'j'サフィックスにはまだGNUの意味があります。