C++ named requirements: UnaryTypeTrait
A UnaryTypeTrait is a class template that describes a property of its template type parameter with a intergral_constant (typically 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 intergral_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 properties 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) | 
| obtains the size of tupleat compile time(class template specialization) | |
| 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::bindexpression 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) | 
    © cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
    http://en.cppreference.com/w/cpp/named_req/UnaryTypeTrait