Параметрезированный typename в шаблоне?

Возможно ли, при объявлении шаблонной функции - указать, что задаваемый typename так же будет параметризован? Например:

template <typename t1, typename t2<T>>
void SomeFunc()
{
t1 var;
t2<T> list;
std::invoke(&t2::insert,list,var)
}

int main()
{
SomeFunc<std::list<std::string>,std::string>();
return 0;
}

Ответы (1 шт):

Автор решения: Swift

Это называется шаблонный параметр шаблона (template template parameter).

#include <string>
#include <list>

template <class T1, template<class> class V>
void SomeFunc()
{
    V<T1> l;
}
 
int main()
{
    SomeFunc<std::string, std::list>();
    return 0;
}

Если аргумент для шаблонного параметра имеет параметры по умолчанию, их придётся учитывать. Например, std::vector на самом деле имеет два параметра-типа.

→ Ссылка