Общее решение.Учитывая тип и шаблон, чтобы проверить, является ли тип экземпляром последнего:
template<typename T, template<typename...> class Tmpl>
struct is_instance_of_a_given_class_template : std:: false_type {};
template<template<typename...> class Tmpl, typename ...Args>
struct is_instance_of_a_given_class_template< Tmpl<Args...>, Tmpl > : std:: true_type {};
С этим, тогда будет верно следующее:
is_instance_of_a_given_class_template< vector<int> , vector > :: value
type to check ~~~~~~~^ ^
template to check against ~~~~~~~~~~~~~~~~~~~~~~~/
и поэтомуВы должны использовать:
static_assert( is_instance_of_a_given_class_template<T,std::vector>::value
, "Some error")
Примечание: Если T
равно const
, это не будет работать напрямую.Так что попробуйте что-то вроде is_instance_of_a_given_class_template< std::decay_t<T> ,std::vector>
.