Hi list, how can I detect if a class inherits from a generic class? E.g., template <class Derived> class base {}; class final: public base<final> {}; I would like to specialise a type trait for all classes deriving from base<whatever>, possibly using enable_if and is_base_of: template <class T, class Enable = void> class trait: boost::false_type {}; // What syntax here? Something like this (which does not work): template <class T, class Derived> class trait<T,typename boost::enable_if<boost::is_base_of<base<Derived>,T> >::type>: boost::true_type {}; The best I've come up with has been putting a typedef for Derived in base, and then using SFINAE: template <class Derived> class base { public: typename Derived derived; }; template <class T> class trait<T,typename boost::enable_if<boost::is_base_of<base<typename T::derived>,T>
::type>: boost::true_type {};
But this is ugly and I'm sure there are much better ways of doing this :) Thanks in advance, Francesco