Я пытаюсь определить, относится ли тип к типу A (с какими-либо параметрами шаблона). Я использую вспомогательную структуру и шаблонную специализацию для него. Я сделал следующее:
#include <iostream>
template<typename,typename,typename,typename,int... pars> struct A{};
template<typename T> struct check: std::false_type{} ;
template<typename... T>
struct check<A<T...>> : std::true_type{}; // specialization is not applied
template<typename... T, int... pars>
struct check<A<T...,pars...>> : std::true_type{}; // same
// the following would get applied for any A:
// template<typename T1, typename T2, typename T3, typename T4, int... pars>
// struct check<A<T1,T2,T3,T4,pars...>> : std::true_type{};
int main(){
std::cout << check<A<int,char,double,int,1,2,3>>::value << std::endl;
}
Однако он выведет 0, поэтому некомментированные специализации не применяются. Это не должно работать или я что-то здесь упускаю? Существует ли аналогичный или альтернативный способ обнаружения для любого типа A, без необходимости записывать все typename T1
et c для класса A, как в приведенной выше строке с комментариями?