使用gcc 4.9我发现用复数形式的文字生成的类型与通过常规方法创建的类型不同,即:
typeid(complex<double>(0.0,1.0)) != typeid(1.0i)
Run Code Online (Sandbox Code Playgroud)
添加缺少的MCVE
#include <complex>
using std::complex;
using namespace std::literals::complex_literals;
#include <iostream>
using std::cout;
using std::endl;
#include <typeinfo>
int main(int argc, char* argv[]) {
if (typeid(complex<double>(0.0, 1.0)) == typeid(1.0i))
cout << "types are same as expected" << endl;
else
cout << "types are unexpectedly not the same" << endl;
cout << 1.0i*1.0i << endl;
cout << complex<double>(0.0, 1.0)*complex<double>(0.0, 1.0) << endl;
}
Run Code Online (Sandbox Code Playgroud)
编译说明:
g++ -std=gnu++14 complex.cpp -o complex.exe
Run Code Online (Sandbox Code Playgroud)
输出:
types are unexpectedly …Run Code Online (Sandbox Code Playgroud)