C++ named requirements: UnaryTypeTrait (since C++11)
From cppreference.com
                    
                                        
                    
                    
                                                            
                    A UnaryTypeTrait is a class template that describes a property of its template type parameter with an std::integral_constant (typically std::bool_constant) specialization.
Requirements
- DefaultConstructible and CopyConstructible.
 - Takes one template type parameter (additional template parameters are optional and allowed).
 - Publicly and unambiguously derived from a specialization of std::integral_constant, known as its base characteristic.
 - The member names of the base characteristic are not hidden and are unambiguously available.
 
Standard library
The following type traits all satisfy UnaryTypeTrait:
- Primary type categories
 - Composite type categories
 - Type properties
 - Supported operations
 - Property queries
 
The following standard library class templates also satisfy UnaryTypeTrait.
|    (C++11)  | 
  compile-time constant of specified type with specified value  (class template)  | 
|    (C++17)  | 
   logical NOT metafunction   (class template)  | 
|    (C++11)  | 
  obtains the size of
 a   | 
|    (C++11)  | 
  obtains the size of an array (class template specialization)  | 
|    (C++11)  | 
  obtains the size of a pair (class template specialization)  | 
|   (C++17)  | 
 obtains the size of the variant's list of alternatives at compile time(class template) (variable template)  | 
|    (C++11)  | 
  indicates that an object is std::bind expression or can be used as one (class template)  | 
|    (C++11)  | 
  indicates that an object is a standard placeholder or can be used as one  (class template)  | 
|    (C++17)  | 
  test whether a class represents an execution policy  (class template)  |