template <class T, class U>
concept bool DerivedFrom =
is_base_of<U, T>::value &&
is_convertible<remove_cv_t<T>*, remove_cv_t<U>*>::value; // see below
There need not be any subsumption relationship between DerivedFrom<T, U> and either is_base_of<U, T>::value or is_convertible<remove_cv_t<T>*, remove_cv_t<U>*>::value.
[ Note: DerivedFrom<T, U> is satisfied if and only if T is publicly and unambiguously derived from U, or T and U are the same class type ignoring cv-qualifiers. — end note ]