Ошибка при использовании шаблона в качестве параметра шаблона

Как говорится, без комментариев:

#include <iostream>
#include <list>

template<typename T, template<class> class Container_t>
void someFunc()
{
    
}

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

main.cpp:49:5: error: no matching function for call to 'someFunc'

main.cpp:18:6: note: candidate template ignored: invalid explicitly-specified argument for template parameter 'Container_t'

Подскажите, что я не так делаю?


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

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

У std::list на самом деле два шаблонных параметра, а не один. Второй - аллокатор, но у него есть аргумент по умолчанию.

Код валиден начиная с C++17, и все основные компиляторы с этим согласны (Clang - только с флагом -frelaxed-template-template-args).

Если нет С++17, то можно пофиксить вот так:

template<typename T, template<class...> class Container_t>
→ Ссылка