#include <iostream>

template <class T, typename U = void> class A;

template <class T>
class C
{
public:
	typedef T Var_t;
};

template <class T>
class B : public C<T>
{
};

template <class T>
class A<B<T>>
{
public:
	A() { std::cout << "Here." << std::endl; }
};

template <class T>
class A<T, typename std::enable_if<
                             std::is_base_of<C<typename T::Var_t>, T>::value>
                             //true>
                             ::type>
{
public:
	A() { std::cout << "There." << std::endl;}
};

int main() 
{
	A<B<int>> a;
	return 0;
}