То, что вы пытаетесь сделать, называется проверкой концепции шаблона.Это должно было быть функцией в C ++ 11, но комитет по стандартам урезал ее.
Вы все еще можете сделать это, хотя она не так чиста, как могла бы быть в противном случае.Бьярн Страуструп объясняет, как это сделать, в своем FAQ: http://www2.research.att.com/~bs/bs_faq2.html#constraints
В частности, он приводит следующий пример:
template<class T, class B> struct Derived_from {
static void constraints(T* p) { B* pb = p; }
Derived_from() { void(*p)(T*) = constraints; }
};
Затем вы просто объявляете фиктивного родителя внутри своего класса, чтобы онотключить ошибку компилятора:
template <class T> class A : Derived_from<T,IClass> { ... }
Страуструп отметил, что это фактически проверяет преобразование, а не наследование.Может быть, есть способ проверить только наследование, если это то, что вам нужно.