Попробуйте с
template <template <typename...> class SupersetType,
typename FirstT, typename ... OthersTs>
FirstT f (SupersetType<FirstT, OthersTs...> const & superset)
{ return FirstT{}; }
или также
template <template <typename...> class SupersetType, typename FirstT>
FirstT f (SupersetType<FirstT> const & superset)
{ return FirstT{}; }
Проблема в том, что std::vector
не принимает только тип, но два;второй - это распределитель со значением по умолчанию.
Таким образом, вы должны принять во внимание эту проблему.
Очевидно, что вы можете написать f()
с параметром шаблона-шаблона, который принимает только два типа
template <template <typename, typename> class SupersetType,
typename FirstT, typename SecondT>
FirstT f (SupersetType<FirstT, SecondT> const & superset)
{ return FirstT{}; }
, но если вы используете параметр шаблона, который принимает переменный список типов, у вас есть более гибкий f()
(который соответствует большему количеству контейнеров)