Спецификатор
constexpr
означает только то, что можно оценить значение функции во время компиляции.Это не означает, что он должен оцениваться во время компиляции.Таким образом, различные компиляторы / версии имеют гибкость в этом вопросе.
Если вы хотите применить такую оценку во время компиляции, тогда переменной, которой она назначена, также должно быть constexpr
.
Это происходиткогда a
равно constexpr int
, а не просто int
.
Чтобы исправить вашу конкретную проблему, вы должны использовать промежуточную переменную, равную constexpr
, а затем присвоить ее значение переменной, которая можетбыть изменены.