Если я вас правильно понимаю, вы хотите:
constexpr void foo(size_t x)
{
bar<x> b{};
}
Это невозможно, поскольку функция constexpr
может быть оценена во время выполнения, и в этом случае аргумент x
не является временем компиляции константа.
Вам нужно вместо этого сделать аргумент шаблоном:
template <size_t X>
constexpr void foo()
{
bar<x> b{};
}
// call it like this:
auto test()
{
foo<24>();
}