Namespaces
Variants

std::common_comparison_category

Depuis fr.cppreference.net
 
 
Bibliothèque d'utilitaires
Support linguistique
Support de types (types de base, RTTI)
Macros de test de fonctionnalités de la bibliothèque (C++20)
Utilitaires de programme
Fonctions variadiques
Support des coroutines (C++20)
Support des contrats (C++26)
Comparaison à trois voies
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilitaires généraux
Opérateurs relationnels (déconseillé en C++20)
 
Défini dans l'en-tête <compare>
template< class... Ts >
struct common_comparison_category
{
    using type = /* see below */ ;
};
(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 de modèle Ts... peuvent être convertis.

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

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)