Самостоятельная инициализация статической переменной constexpr, хорошо ли она сформирована?
Учитывая следующее объявление в глобальном пространстве имен:
constexpr int x = x;
Это правильно сформировано?
Проект C ++ 14 стандартного раздела3.6.2
[Basic.start.init] говорит:
Переменные со статической продолжительностью хранения (3.7.1) или продолжительностью хранения потока (3.7.2) должны быть инициализированы нулями (8.5) перед любой другой инициализацией. [...]
То, что делает пример хорошо определенным, это то, чтоx
инициализируется своим собственным значением во время постоянной инициализации, которая будет0
из-за нулевой инициализации.
Это действительно так? лязгпринимает этот код в то время какGCC производит диагностику:
error: the value of 'x' is not usable in a constant expression
constexpr int x = x;
^