То есть что-то наподобие
template <int... Ints>
constexpr void foo();
constexpr void bar(int (&ints)[5]) {
foo</* something */>();
}
bar({1, 2, 3, 4, 5}) // will call foo<1, 2, 3, 4, 5>
Нет.
Почему?
Невозможно. Но не потому, что аргументы в массиве не constexpr, а потому, что в месте вызова внутри bar пришлось бы инстанцировать 2^32^5 вариантов вызова foo. Для малого количества вариантов такие штуки решаются через std::visit.
Что? Откуда вы взяли 2^32^5? Зачем мне инстанцировать шаблон так много раз? Как тут std::visit поможет то вообще?
У вас на входе 5 штук int. Соответственно, для всего множества их значений, которые возможно передать в качестве шаблонных параметров для foo, нужно по инстансу foo.
Зачем мне какое-то множество? Я инстанциирую bar с конкретными числами.
Обсуждают сегодня