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