std::common_comparison_category
Depuis fr.cppreference.net
< cpp | utilitaire
| 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 :
- Si un
Ti quelconque n'est pas un type de catégorie de comparaison (std::partial_ordering, std::weak_ordering, std::strong_ordering), alorsUestvoid. - Sinon, si au moins un
Ti est std::partial_ordering, alorsUest std::partial_ordering. - Sinon, si au moins un
Ti est std::weak_ordering, alorsUest std::weak_ordering. - Sinon (si chaque
Ti est std::strong_ordering, ou si la liste est vide), alorsUest std::strong_ordering.
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
|
Cette section est incomplète
Raison : aucun exemple |
Voir aussi
|
(C++20)
|
le type de résultat de comparaison à trois voies qui prend en charge les 6 opérateurs et est substituable
(classe) |
|
(C++20)
|
le type de résultat de comparaison à trois voies qui prend en charge les 6 opérateurs et n'est pas substituable
(classe) |
|
(C++20)
|
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) |