#include <complex>
struct S
{
static std::complex<double> constexpr c;
};
gcc генерирует ошибку, поскольку отсутствует инициализатор. Clang и MSVC не генерируют ошибку.
Насколько я знаю, статический элемент constexpr должен иметь инициализатор, даже если он имеет тип класса, который имеет конструктор, который можно вызывать без аргументов (как в этом случае). К сожалению, у меня нет последнего стандарта C++ для подтверждения моего предположения.
Поэтому правильный код должен инициализироваться конструктором, например:
struct S
{
static std::complex<double> constexpr c {};
};
Может ли кто-нибудь доказать, какой компилятор прав, а что неправильно?