std::DerivedFrom (3) - Linux Man Pages
Defined in header <concepts>
template< class Derived, class Base >
concept DerivedFrom = (since C++20)
std::is_base_of_v<Base, Derived> &&
std::is_convertible_v<const volatile Derived*, const volatile Base*>;
The concept DerivedFrom<Derived, Base> is satisfied if and only if Base is a class type that is either Derived or a public and unambiguous base of Derived, ignoring cv-qualifiers.
Note that this behaviour is different to std::is_base_of when Base is a private or protected base of Derived.
is_base_of checks if a type is derived from the other type
is_nothrow_convertible checks if a type can be converted to the other type