Вы можете написать общую черту для соответствия любой специализации:
template <typename T, template <typename...> class Z>
struct is_specialization_of : std::false_type { };
template <typename... Args, template <typename....> class Z>
struct is_specialization_of<Z<Args...>, Z> : std::true_type { };
Что в вашем конкретном случае будет:
is_specialization_of<T, Foo>::value // <== T is some kind of Foo