std::experimental::ranges:: EqualityComparable, std::experimental::ranges:: EqualityComparableWith
|
Défini dans l'en-tête
<experimental/ranges/concepts>
|
||
|
template
<
class
T
>
concept bool EqualityComparable = WeaklyEqualityComparableWith < T, T > ; |
(1) | (ranges TS) |
|
template
<
class
T,
class
U
>
concept
bool
EqualityComparableWith
=
|
(2) | (ranges TS) |
EqualityComparable<T>
spécifie que les opérateurs de comparaison
==
et
!=
sur
T
reflètent l'égalité :
==
donne
true
si et seulement si les opérandes sont égaux.
EqualityComparable<T>
est satisfait uniquement si, étant donné les objets
a
et
b
de type
T
,
bool
(
a
==
b
)
est
true
si et seulement si
a
et
b
sont égaux. Conjointement avec l'exigence que
a
==
b
préserve l'égalité, cela implique que
==
est symétrique et transitif, et en outre que
==
est réflexif pour tous les objets
a
qui sont égaux à au moins un autre objet.
EqualityComparableWith<T, U>
spécifie que les opérateurs de comparaison
==
et
!=
sur des opérandes (éventuellement mixtes) de types
T
et
U
produisent des résultats cohérents avec l'égalité. La comparaison d'opérandes mixtes produit des résultats équivalents à la comparaison des opérandes convertis vers leur type commun.
EqualityComparableWith<T, U>
est satisfait seulement si, étant donné toute lvalue
t
de type
const
std::
remove_reference_t
<
T
>
et toute lvalue
u
de type
const
std::
remove_reference_t
<
U
>
, et soit
C
comme
ranges::
common_reference_t
<
const
std::
remove_reference_t
<
T
>
&
,
const
std::
remove_reference_t
<
U
>
&
>
,
bool
(
t
==
u
)
==
bool
(
C
(
t
)
==
C
(
u
)
)
.
Préservation de l'égalité
Une expression est préservatrice d'égalité si elle produit des résultats égaux pour des entrées égales.
- Les entrées d'une expression consistent en ses opérandes.
- Les sorties d'une expression consistent en son résultat et tous les opérandes modifiés par l'expression (le cas échéant).
Toute expression devant préserver l'égalité doit en outre être stable : deux évaluations d'une telle expression avec les mêmes objets d'entrée doivent produire des sorties égales en l'absence de toute modification explicite intervenant entre-temps sur ces objets d'entrée.
Variations d'expressions implicites
Une requires-expression qui utilise une expression non modifiante pour un opérande constant lvalue donné exige également implicitement des variations supplémentaires de cette expression qui acceptent un lvalue non constant ou un rvalue (éventuellement constant) pour l'opérande donné, sauf si une telle variation d'expression est explicitement exigée avec une sémantique différente. Ces variations d'expression implicites doivent satisfaire aux mêmes exigences sémantiques que l'expression déclarée. La mesure dans laquelle une implémentation valide la syntaxe des variations n'est pas spécifiée.