да, тоже не яснл
Я так думаю т.к ты передал не константу то constexpr был отброшен. А когда передаешь константу то у тебя не меняется глобальная перемернная и все ок constexpr работает как надо
нет вопрос как проверка constexprности спотыкается об is_constant_evaluated которая просто рантайм функция
вероятно там просто проверка не required
constexpr bool is_constant_evaluated() noexcept; (since C++20).Она же тоже constexpr
Типа не рантайм ?
моя гипотеза: 1) определение constexpr функции должно удовлетворять требованиям dcl.constexpr#3. твой пример полностью им соответствует, потому что там нет ничего про переменные usable in constant expression 2) переменные usable in constant expression играют роль уже при вычислении core constant expression (expr.const#5.12.1), а там уже никто не мешает вызывать std::is_constant_evaluated() и наблюдать, что страшные для core constant expression вещи не происходят
Обсуждают сегодня