Как я выяснил, у вас есть поддержка C ++ 17, но в случае C ++ 11 / C ++ 14 вы можете сделать следующее (возможно, вам это понадобится в будущем):
template<
typename To,
typename From
typename... Rest
> constexpr bool is_converible_variadic_impl()
{
return \
std::is_convertible<From, To>::value &&
is_converible_variadic_impl<To, Rest...>();
}
template<
typename To,
typename From
> constexpr bool is_converible_variadic_impl()
{
return std::is_convertible<From, To>::value;
}
/*************************************************/
template<
typename To,
typename... From
> struct is_convertible_variadic
: std::integral_constant<bool, is_converible_variadic_impl<To, From...>()>
{ };
template<
typename To,
typename... From
> constexpr bool is_convertible_variadic_v = is_convertible_variadic<To, From...>::value;
Для size_t
используйте его, как в следующем примере:
template<typename... Args>
std::enable_if_t<std::is_convertible_variadic_v<size_t, Args...> >
some_function (Args... args) {}
Возможно, вводить тип «To» в начале (несоответствие с STL) параметров шаблона может быть непонятно, но я думаю, что это не так такая сложная задача это исправить:)