Consider the case of a templated function with variadic template arguments:
template Tret func(const T&... t);
This simple solution works for me:
template
void unwrap_tuple(std::tuple* tp)
{
std::cout << "And here I have the tuple types, all " << sizeof...(T) << " of them" << std::endl;
}
int main()
{
using TupleType = std::tuple;
unwrap_tuple((TupleType*)nullptr); // trick compiler into using template param deduction
}