Случай, когда аргумент constexpr no-arg c-tor для этого литерального типа выполняет свою работу. Но это не работает, и GCC требует инициализатора

#include <complex>

struct S
{
  static std::complex<double> constexpr c;
};

енерирует ошибку, потому что инициализатор отсутствует. Clang и MSVC не генерируют ошибку.

Насколько я знаю, член статических данных constexpr должен иметь инициализатор, даже если он имеет тип класса, который имеет конструктор, который можно вызывать без аргументов (как в этом случае). К сожалению, у меня нет последнего стандарта C ++, чтобы подтвердить мое предположение.

Поэтому правильный код должен инициализироваться с помощью конструктора, например:

struct S
{
  static std::complex<double> constexpr c {};
};

Кто-нибудь может доказать, какой компилятор прав, а какой нет?

Ответы на вопрос(1)

Ваш ответ на вопрос