Вы можете отключить конструктор переменных, когда есть только один аргумент и он int
.
Если у вас есть c ++ 17, вы можете сделать это как
template <
std::size_t N = sizeof...(T),
std::enable_if_t<(N != 1 || !(std::is_same_v<T, int> && ...)), bool> = true>
bar(T... x) {store(data,x...);}
В противном случае вы можете использовать:
template <bool... Pred>
struct all_dummy;
template <bool... Preds>
using all = std::is_same<all_dummy<Preds...>, all_dummy<((void)Preds, true)...>>;
template <
std::size_t N = sizeof...(T),
std::enable_if_t<(N != 1 || !all<std::is_same<T, int>::value...>::value), bool> = true
>
bar(T... x) {store(data,x...);}