Namespaces
Variants

std:: common_comparison_category

From cppreference.net
Utilities library
Definido en el encabezado <compare>
template < class ... Ts >

struct common_comparison_category
{
using type = /* ver más abajo */ ;

} ;
(desde C++20)

La plantilla de clase std::common_comparison_category proporciona un alias (como el typedef miembro type ) para la categoría de comparación más fuerte a la que todos los argumentos de plantilla Ts... pueden convertirse.

En detalle, el tipo de comparación común de una lista de n tipos T 0 ... T n-1 se define de la siguiente manera:

Contenidos

Parámetros de plantilla

...Ts - una posiblemente lista vacía de tipos

Plantilla auxiliar

template < class ... Ts >
using common_comparison_category_t = common_comparison_category < Ts... > :: type ;
(desde C++20)

Tipos de miembros

Tipo de miembro Definición
type la categoría de comparación común más fuerte (como se definió anteriormente)

Implementación posible

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)
    )> {};

Ejemplo

Véase también

el tipo de resultado de comparación de 3 vías que admite los 6 operadores y es sustituible
(class)
el tipo de resultado de comparación de 3 vías que admite los 6 operadores y no es sustituible
(class)
el tipo de resultado de comparación de 3 vías que admite los 6 operadores, no es sustituible y permite valores incomparables
(class)