C++ named requirements: TransformationTrait (since C++11)
From cppreference.com
                    
                                        
                    
                    
                                                            
                    A TransformationTrait is a class template that provides a transformation of its template type parameter.
Requirements
- Takes one template type parameter (additional template parameters are optional and allowed).
 - The transformed type is a publicly accessible nested type named type.
 
Standard library
All type transformation traits satisfy TransformationTrait.
The following standard library class templates also satisfy TransformationTrait.
|   obtains the type of the specified element  (class template specialization)  | |
  obtains the type of the elements of pair (class template specialization)  | |
  obtains the type of the elements of array (class template specialization)  | |
|  obtains the type of the alternative specified by its index, at compile time (class template) (alias template)  |