foo
может использоваться следующим образом:
int i;
std::cin >> i;
foo("foo", i);
Как видите, i
не является константным выражением выше, но все же может использоваться с функциями constexpr
. constexpr
функции (и шаблоны функций) - странное чудовище, которое гарантирует, что, например, foo(p, i)
является константным выражением, если p
и i
также являются, , но все еще может использоваться как обычные функции.
Если аргументы для ваших функций действительно подразумеваются как постоянные выражения, то они должны быть аргументами шаблона, а не аргументами функции.