Consider the case of a templated function with variadic template arguments:
template Tret func(const T&... t);
Why not just wrap your variadic arguments into a tuple class and then use compile time recursion (see link) to retrieve the index you are interested in. I find that unpacking variadic templates into a container or collection may not be type safe w.r.t. heterogeneous types
template
auto get_args_as_tuple(Args... args) -> std::tuple
{
return std::make_tuple(args);
}