std::DerivedFrom
From cppreference.com
                    
                                        
                    
                    
                                                            
                    |   Defined in header  <concepts>
  | 
||
|   template< class Derived, class Base > concept DerivedFrom =  | 
(since C++20) | |
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.
See also
|    (C++11)  | 
   checks if a type is derived from the other type   (class template)  | 
|    (C++11)(C++20)  | 
   checks if a type can be converted to the other type   (class template)  |