Используя gcc 4.9
, я обнаружил, что типы, сгенерированные с литералом типа для сложных чисел, не совпадают с типами, созданными обычными способами, то есть:
typeid(complex<double>(0.0,1.0)) != typeid(1.0i)
- Я делаю ошибку здесь?
- Является ли это ошибкой компилятора или стандартным поведением?
- Если предполагаемое стандартное поведение: в чем причина?
Добавление отсутствующего 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;
}
Инструкции по компиляции:
g++ -std=gnu++14 complex.cpp -o complex.exe
Вывод:
types are unexpectedly not the same
1
(-1,0)
Интересно, что литерал даже не кажется правильным мнимым числом. (Я уверен, что я что-то пропускаю...)