std:: common_comparison_category
|
Defined in header
<compare>
|
||
|
template
<
class
...
Ts
>
struct
common_comparison_category
|
(since C++20) | |
The class template
std::common_comparison_category
provides an alias (as the member typedef
type
) for the strongest comparison category to which all of the template arguments
Ts...
can be converted.
In detail, the common comparison type of a list of n types
T
0
...
T
n-1
is defined as follows:
-
If any
Ti is not a comparison category type ( std::partial_ordering , std::weak_ordering , std::strong_ordering ),Uis void . -
Otherwise, if at least one
Ti is std::partial_ordering ,Uis std::partial_ordering . -
Otherwise, if at least one
Ti is std::weak_ordering ,Uis std::weak_ordering . -
Otherwise (if every
Ti is std::strong_ordering , or if the list is empty),Uis std::strong_ordering .
Template parameters
| ...Ts | - | a possibly empty list of types |
Helper template
|
template
<
class
...
Ts
>
using common_comparison_category_t = common_comparison_category < Ts... > :: type ; |
(since C++20) | |
Member types
| Member type | Definition |
type
|
the strongest common comparison category (as defined above) |
Possible implementation
namespace detail { template<unsigned int> struct common_cmpcat_base { using type = void; }; template<> struct common_cmpcat_base<0u> { using type = std::strong_ordering; }; template<> struct common_cmpcat_base<2u> { using type = std::partial_ordering; }; template<> struct common_cmpcat_base<4u> { using type = std::weak_ordering; }; template<> struct common_cmpcat_base<6u> { using type = std::partial_ordering; }; } // namespace detail template<class...Ts> struct common_comparison_category : detail::common_cmpcat_base<(0u | ... | (std::is_same_v<Ts, std::strong_ordering> ? 0u : std::is_same_v<Ts, std::weak_ordering> ? 4u : std::is_same_v<Ts, std::partial_ordering> ? 2u : 1u) )> {}; |
Example
|
This section is incomplete
Reason: no example |
See also
|
(C++20)
|
the result type of 3-way comparison that supports all 6 operators and is substitutable
(class) |
|
(C++20)
|
the result type of 3-way comparison that supports all 6 operators and is not substitutable
(class) |
|
(C++20)
|
the result type of 3-way comparison that supports all 6 operators, is not substitutable, and allows incomparable values
(class) |