Ваша constexpr
функция требует слишком много вычислений для выполнения в компиляторе, поэтому компилятор решает отложить ее до выполнения во время выполнения.
Вы можете изменить эту строку:
static const auto c_x = c_fun(40);
до:
constexpr auto c_x = c_fun(40);
, чтобы увидеть выходные данные компилятора.На clang он говорит мне:
note: constexpr evaluation hit maximum step limit;
c_x
действительно является константой времени компиляции, но компилятор не может ее вычислить из-за ограничений реализации.Обратите внимание, что ваша функция имеет экспоненциальную сложность.
Все будет хорошо , если вы измените 40 на какое-то разумное число, например 10:
constexpr auto c_x = c_fun(10);