Использование «нормального» аргумента функции constexpr в шаблоне - PullRequest
0 голосов
/ 03 апреля 2020

Допустим, у меня есть эта функция:

constexpr void foo(size_t x)
{ }

И этот шаблон:

template<size_t X>
class bar;

Можно ли создать экземпляр экземпляра панели шаблонов с constexpr size_t x внутри Функция foo, если я знаю, что всегда буду constexpr оценивать эту функцию (C ++ 17)?

1 Ответ

1 голос
/ 03 апреля 2020

Если я вас правильно понимаю, вы хотите:

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>();
}
...