std:: totally_ordered, std:: totally_ordered_with
|
Défini dans l'en-tête
<concepts>
|
||
|
template
<
class
T
>
concept totalement_ordonné
=
|
(1) | (depuis C++20) |
|
template
<
class
T,
class
U
>
concept totalement_ordonné_avec
=
|
(2) | (depuis C++20) |
|
Concepts auxiliaires
|
||
|
template
<
class
T,
class
U
>
concept __PartiellementOrdonnéAvec
=
|
(3) | ( exposition uniquement* ) |
std::totally_ordered
spécifie que les opérateurs de comparaison
==,!=,<,>,<=,>=
sur un type produisent des résultats cohérents avec un
ordre total strict
sur le type.
std::totally_ordered_with
spécifie que les opérateurs de comparaison
==,!=,<,>,<=,>=
sur des opérandes (éventuellement mixtes)
T
et
U
produisent des résultats cohérents avec un ordre total strict. La comparaison d'opérandes mixtes produit des résultats équivalents à la comparaison des opérandes convertis en leur type commun.
__PartiallyOrderedWith
spécifie qu'une valeur de type
T
et une valeur de type
U
peuvent être comparées selon un ordre partiel l'une avec l'autre (dans les deux sens) en utilisant
<
,
>
,
<=
, et
>=
, et que les résultats des comparaisons sont cohérents.
Table des matières |
Exigences sémantiques
Ces concepts sont modélisés uniquement s'ils sont satisfaits et si tous les concepts qu'ils subsument sont modélisés.
a
,
b
et
c
de type
const
std::
remove_reference_t
<
T
>
:
- Exactement une des expressions bool ( a < b ) , bool ( a > b ) et bool ( a == b ) est true ;
- Si bool ( a < b ) et bool ( b < c ) sont toutes deux true , alors bool ( a < c ) est true ;
- bool ( a > b ) == bool ( b < a )
- bool ( a >= b ) == ! bool ( a < b )
- bool ( a <= b ) == ! bool ( b < a )
-
tett2, des lvalues désignant des objets distincts mais égaux de types const std:: remove_reference_t < T > et std:: remove_reference_t < T > respectivement, et -
uetu2, des lvalues désignant des objets distincts mais égaux de types const std:: remove_reference_t < U > et std:: remove_reference_t < U > respectivement,
Soit
C
le type
std::
common_reference_t
<
const
std::
remove_reference_t
<
T
>
&
,
const
std::
remove_reference_t
<
U
>
&
>
, et, étant donnée une expression
E
et un type
C
, soit
CONVERT_TO
<
C
>
(
E
)
défini comme suit :
|
(jusqu'en C++23) |
|
(depuis C++23) |
les affirmations suivantes sont vraies :
- bool ( t < u ) == bool ( CONVERT_TO < C > ( t2 ) < CONVERT_TO < C > ( u2 ) )
- bool ( t > u ) == bool ( CONVERT_TO < C > ( t2 ) > CONVERT_TO < C > ( u2 ) )
- bool ( t <= u ) == bool ( CONVERT_TO < C > ( t2 ) <= CONVERT_TO < C > ( u2 ) )
- bool ( t >= u ) == bool ( CONVERT_TO < C > ( t2 ) >= CONVERT_TO < C > ( u2 ) )
- bool ( u < t ) == bool ( CONVERT_TO < C > ( u2 ) < CONVERT_TO < C > ( t2 ) )
- bool ( u > t ) == bool ( CONVERT_TO < C > ( u2 ) > CONVERT_TO < C > ( t2 ) )
- bool ( u <= t ) == bool ( CONVERT_TO < C > ( u2 ) <= CONVERT_TO < C > ( t2 ) )
- bool ( u >= t ) == bool ( CONVERT_TO < C > ( u2 ) >= CONVERT_TO < C > ( t2 ) )
-
toute lvalue
tde type const std:: remove_reference_t < T > , et -
toute lvalue
ude type const std:: remove_reference_t < U > ,
les conditions suivantes sont vraies :
- t < u , t <= u , t > u , t >= u , u < t , u <= t , u > t , et u >= t ont le même domaine ;
- bool ( t < u ) == bool ( u > t ) ;
- bool ( u < t ) == bool ( t > u ) ;
- bool ( t <= u ) == bool ( u >= t ) ; et
- bool ( u <= t ) == bool ( t >= u ) .
Préservation de l'égalité
Les expressions déclarées dans les requires expressions des concepts de la bibliothèque standard doivent être equality-preserving (sauf indication contraire).
Variations d'expression implicites
Une requires expression qui utilise une expression non modifiante pour un opérande constant lvalue requiert également les variations d'expression implicites .
Références
- Norme C++23 (ISO/CEI 14882:2024) :
-
-
18.5.5 Concept
totally_ordered[concept.totallyordered]
-
18.5.5 Concept
- Norme C++20 (ISO/IEC 14882:2020) :
-
-
18.5.4 Concept
totally_ordered[concept.totallyordered]
-
18.5.4 Concept
Voir aussi
|
spécifie que l'opérateur
<=>
produit un résultat cohérent sur les types donnés
(concept) |