Sommaire
Concepts
spécifie que l'opérateur
<=>
produit un résultat cohérent sur les types donnés
(concept)
Classes
le type de résultat de la comparaison à trois voies qui prend en charge les 6 opérateurs, n'est pas substituable et autorise les valeurs incomparables
(classe)
le type de résultat de la comparaison à trois voies qui prend en charge les 6 opérateurs et n'est pas substituable
(classe)
le type de résultat de la comparaison à trois voies qui prend en charge les 6 opérateurs et est substituable
(classe)
la catégorie de comparaison la plus forte à laquelle tous les types donnés peuvent être convertis
(modèle de classe)
obtient le type de résultat de l'opérateur de comparaison à trois voies
<=>
sur les types donnés
(modèle de classe)
objet fonction contraint implémentant
x
<=>
y
(classe)
Objets de point de personnalisation
effectue une comparaison à trois voies et produit un résultat de type
std::strong_ordering
(objet point de personnalisation)
effectue une comparaison à trois voies et produit un résultat de type
std::weak_ordering
(objet de point de personnalisation)
effectue une comparaison à trois voies et produit un résultat de type
std::partial_ordering
(objet point de personnalisation)
effectue une comparaison à trois voies et produit un résultat de type
std::strong_ordering
, même si
operator
<=>
n'est pas disponible
(objet de point de personnalisation)
effectue une comparaison à trois voies et produit un résultat de type
std::weak_ordering
, même si
operator
<=>
n'est pas disponible
(objet de point de personnalisation)
effectue une comparaison à trois voies et produit un résultat de type
std::partial_ordering
, même si
operator
<=>
n'est pas disponible
(objet de point de personnalisation)
Fonctions
fonctions de comparaison nommées
(fonction)
Synopsis
// all freestanding
namespace std {
// comparison category types
class partial_ordering ;
class weak_ordering ;
class strong_ordering ;
// named comparison functions
constexpr bool is_eq ( partial_ordering cmp ) noexcept { return cmp == 0 ; }
constexpr bool is_neq ( partial_ordering cmp ) noexcept { return cmp != 0 ; }
constexpr bool is_lt ( partial_ordering cmp ) noexcept { return cmp < 0 ; }
constexpr bool is_lteq ( partial_ordering cmp ) noexcept { return cmp <= 0 ; }
constexpr bool is_gt ( partial_ordering cmp ) noexcept { return cmp > 0 ; }
constexpr bool is_gteq ( partial_ordering cmp ) noexcept { return cmp >= 0 ; }
// common comparison category type
template < class ... Ts > struct common_comparison_category
{
using type = /* see description */ ;
};
template < class ... Ts >
using common_comparison_category_t = common_comparison_category < Ts ... >:: type ;
// concept three_way_comparable
template < class T , class Cat = partial_ordering >
concept three_way_comparable = /* see description */ ;
template < class T , class U , class Cat = partial_ordering >
concept three_way_comparable_with = /* see description */ ;
// result of three-way comparison
template < class T , class U = T > struct compare_three_way_result ;
template < class T , class U = T >
using compare_three_way_result_t = compare_three_way_result < T , U >:: type ;
// class compare_three_way
struct compare_three_way ;
// comparison algorithms
inline namespace /* unspecified */ {
inline constexpr /* unspecified */ strong_order = /* unspecified */ ;
inline constexpr /* unspecified */ weak_order = /* unspecified */ ;
inline constexpr /* unspecified */ partial_order = /* unspecified */ ;
inline constexpr /* unspecified */ compare_strong_order_fallback = /* unspecified */ ;
inline constexpr /* unspecified */ compare_weak_order_fallback = /* unspecified */ ;
inline constexpr /* unspecified */ compare_partial_order_fallback = /* unspecified */ ;
}
// type ordering
template < class T , class U > struct type_order ;
template < class T , class U >
constexpr strong_ordering type_order_v = type_order < T , U >:: value ;
}
namespace std {
template < class T , class Cat >
concept /*compares-as*/ = // exposition-only
same_as < common_comparison_category_t < T , Cat > , Cat > ;
template < class T , class U >
concept /*partially-ordered-with*/ = // exposition-only
requires ( const remove_reference_t < T >& t , const remove_reference_t < U >& u ) {
{ t < u } -> /*boolean-testable*/ ;
{ t > u } -> /*boolean-testable*/ ;
{ t <= u } -> /*boolean-testable*/ ;
{ t >= u } -> /*boolean-testable*/ ;
{ u < t } -> /*boolean-testable*/ ;
{ u > t } -> /*boolean-testable*/ ;
{ u <= t } -> /*boolean-testable*/ ;
{ u >= t } -> /*boolean-testable*/ ;
};
template < class T , class Cat = partial_ordering >
concept three_way_comparable =
/*weakly-equality-comparable-with*/ < T , T > && /*partially-ordered-with*/ < T , T > &&
requires ( const remove_reference_t < T >& a , const remove_reference_t < T >& b ) {
{ a <=> b } -> /*compares-as*/ < Cat > ;
};
}
namespace std {
template < class T , class U , class Cat = partial_ordering >
concept three_way_comparable_with =
three_way_comparable < T , Cat > && three_way_comparable < U , Cat > &&
/*comparison-common-type-with*/ < T , U > &&
three_way_comparable <
common_reference_t < const remove_reference_t < T >& , const remove_reference_t < U >&> ,
Cat > &&
/*weakly-equality-comparable-with*/ < T , U > && /*partially-ordered-with*/ < T , U > &&
requires ( const remove_reference_t < T >& t , const remove_reference_t < U >& u ) {
{ t <=> u } -> /*compares-as*/ < Cat > ;
{ u <=> t } -> /*compares-as*/ < Cat > ;
};
}
Classe std :: partial_ordering
namespace std {
class partial_ordering
{
int /*value*/ ; // exposition-only
bool /*is-ordered*/ ; // exposition-only
// exposition-only constructors
constexpr explicit partial_ordering ( /*ord*/ v ) noexcept
: /*value*/ ( int ( v ))
, /*is-ordered*/ ( true )
{
} // exposition-only
constexpr explicit partial_ordering ( /*ncmp*/ v ) noexcept
: /*value*/ ( int ( v ))
, /*is-ordered*/ ( false )
{
} // exposition-only
public :
// valid values
static const partial_ordering less ;
static const partial_ordering equivalent ;
static const partial_ordering greater ;
static const partial_ordering unordered ;
// comparisons
friend constexpr bool operator == ( partial_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator == ( partial_ordering v ,
partial_ordering w ) noexcept = default ;
friend constexpr bool operator < ( partial_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator > ( partial_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator <= ( partial_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator >= ( partial_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator < ( /* unspecified */ , partial_ordering v ) noexcept ;
friend constexpr bool operator > ( /* unspecified */ , partial_ordering v ) noexcept ;
friend constexpr bool operator <= ( /* unspecified */ , partial_ordering v ) noexcept ;
friend constexpr bool operator >= ( /* unspecified */ , partial_ordering v ) noexcept ;
friend constexpr partial_ordering operator <=> ( partial_ordering v ,
/* unspecified */ ) noexcept ;
friend constexpr partial_ordering operator <=> ( /* unspecified */ ,
partial_ordering v ) noexcept ;
};
// valid values' definitions
inline constexpr partial_ordering partial_ordering::less ( /*ord*/ :: /*less*/ );
inline constexpr partial_ordering partial_ordering::equivalent ( /*ord*/ :: /*equivalent*/ );
inline constexpr partial_ordering partial_ordering::greater ( /*ord*/ :: /*greater*/ );
inline constexpr partial_ordering partial_ordering::unordered ( /*ncmp*/ :: /*unordered*/ );
}
Classe std :: weak_ordering
namespace std {
class weak_ordering
{
int /*value*/ ; // exposition-only
// exposition-only constructors
constexpr explicit weak_ordering ( /*ord*/ v ) noexcept
: /*value*/ ( int ( v ))
{
} // exposition-only
public :
// valid values
static const weak_ordering less ;
static const weak_ordering equivalent ;
static const weak_ordering greater ;
// conversions
constexpr operator partial_ordering () const noexcept ;
// comparisons
friend constexpr bool operator == ( weak_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator == ( weak_ordering v , weak_ordering w ) noexcept = default ;
friend constexpr bool operator < ( weak_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator > ( weak_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator <= ( weak_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator >= ( weak_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator < ( /* unspecified */ , weak_ordering v ) noexcept ;
friend constexpr bool operator > ( /* unspecified */ , weak_ordering v ) noexcept ;
friend constexpr bool operator <= ( /* unspecified */ , weak_ordering v ) noexcept ;
friend constexpr bool operator >= ( /* unspecified */ , weak_ordering v ) noexcept ;
friend constexpr weak_ordering operator <=> ( weak_ordering v ,
/* unspecified */ ) noexcept ;
friend constexpr weak_ordering operator <=> ( /* unspecified */ ,
weak_ordering v ) noexcept ;
};
// valid values' definitions
inline constexpr weak_ordering weak_ordering::less ( /*ord*/ :: /*less*/ );
inline constexpr weak_ordering weak_ordering::equivalent ( /*ord*/ :: /*equivalent*/ );
inline constexpr weak_ordering weak_ordering::greater ( /*ord*/ :: /*greater*/ );
}
Classe std :: strong_ordering
namespace std {
class strong_ordering
{
int /*value*/ ; // exposition-only
// exposition-only constructors
constexpr explicit strong_ordering ( /*ord*/ v ) noexcept
: /*value*/ ( int ( v ))
{
} // exposition-only
public :
// valid values
static const strong_ordering less ;
static const strong_ordering equal ;
static const strong_ordering equivalent ;
static const strong_ordering greater ;
// conversions
constexpr operator partial_ordering () const noexcept ;
constexpr operator weak_ordering () const noexcept ;
// comparisons
friend constexpr bool operator == ( strong_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator == ( strong_ordering v ,
strong_ordering w ) noexcept = default ;
friend constexpr bool operator < ( strong_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator > ( strong_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator <= ( strong_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator >= ( strong_ordering v , /* unspecified */ ) noexcept ;
friend constexpr bool operator < ( /* unspecified */ , strong_ordering v ) noexcept ;
friend constexpr bool operator > ( /* unspecified */ , strong_ordering v ) noexcept ;
friend constexpr bool operator <= ( /* unspecified */ , strong_ordering v ) noexcept ;
friend constexpr bool operator >= ( /* unspecified */ , strong_ordering v ) noexcept ;
friend constexpr strong_ordering operator <=> ( strong_ordering v ,
/* unspecified */ ) noexcept ;
friend constexpr strong_ordering operator <=> ( /* unspecified */ ,
strong_ordering v ) noexcept ;
};
// valid values' definitions
inline constexpr strong_ordering strong_ordering::less ( /*ord*/ :: /*less*/ );
inline constexpr strong_ordering strong_ordering::equal ( /*ord*/ :: /*equal*/ );
inline constexpr strong_ordering strong_ordering::equivalent ( /*ord*/ :: /*equivalent*/ );
inline constexpr strong_ordering strong_ordering::greater ( /*ord*/ :: /*greater*/ );
}
namespace std {
struct compare_three_way {
template < class T, class U>
constexpr auto operator( ) ( T&& t, U&& u) const ;
using is_transparent = /* non spécifié */ ;
} ;
}
Classe std :: type_order
namespace std {
template < class T , class U > struct type_order {
static constexpr strong_ordering value = /*TYPE-ORDER*/ ( T , U );
using value_type = strong_ordering ;
constexpr operator value_type () const noexcept { return value ; }
constexpr value_type operator ()() const noexcept { return value ; }
};
}
Voir aussi