C++ named requirements: TransformationTrait
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
The type modifications and transformations all 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)  |