Namespaces
Variants

std:: common_comparison_category

From cppreference.net
Utilities library
Défini dans l'en-tête <compare>
template < class ... Ts >

struct common_comparison_category
{
using type = /* voir ci-dessous */ ;

} ;
(depuis C++20)

Le modèle de classe std::common_comparison_category fournit un alias (sous la forme du typedef membre type ) pour la catégorie de comparaison la plus forte vers laquelle tous les arguments du modèle Ts... peuvent être convertis.

En détail, le type de comparaison commun d'une liste de n types T 0 ... T n-1 est défini comme suit :

Table des matières

Paramètres du modèle

...Ts - une liste éventuellement vide de types

Modèle d'assistance

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

Types membres

Type de membre Définition
type la catégorie de comparaison commune la plus forte (telle que définie ci-dessus)

Implémentation possible

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

Exemple

Voir aussi

le type de résultat de comparaison à trois voies qui prend en charge les 6 opérateurs et est substituable
(classe)
le type de résultat de comparaison à trois voies qui prend en charge les 6 opérateurs et n'est pas substituable
(classe)
le type de résultat de comparaison à trois voies qui prend en charge les 6 opérateurs, n'est pas substituable et autorise des valeurs incomparables
(classe)