std:: equality_comparable, std:: equality_comparable_with
|
Definido en el encabezado
<concepts>
|
||
|
template
<
class
T
>
concept equality_comparable = __WeaklyEqualityComparableWith < T, T > ; |
(1) | (desde C++20) |
|
template
<
class
T,
class
U
>
concept equality_comparable_with
=
|
(2) | (desde C++20) |
|
Conceptos auxiliares
|
||
|
template
<
class
T,
class
U
>
concept __WeaklyEqualityComparableWith
=
|
(3) | ( solo para exposición* ) |
| (4) | ||
|
template
<
class
T,
class
U
>
concept __ComparisonCommonTypeWith
=
|
(hasta C++23)
( solo para exposición* ) |
|
|
template
<
class
T,
class
U,
class
C
=
std::
common_reference_t
<
const
T
&
,
const
U
&
>
>
concept _ComparisonCommonTypeWithImpl
=
|
(desde C++23)
( solo para exposición* ) |
|
std::equality_comparable
especifica que los operadores de comparación
==
y
!=
en
T
reflejan igualdad:
==
produce
true
si y solo si los operandos son iguales.
std::equality_comparable_with
especifica que los operadores de comparación
==
y
!=
en operandos (posiblemente mixtos) de
T
y
U
producen resultados consistentes con la igualdad. La comparación de operandos mixtos produce resultados equivalentes a comparar los operandos convertidos a su tipo común.
__WeaklyEqualityComparableWith
especifica que un objeto de tipo
T
y un objeto de tipo
U
pueden ser comparados para igualdad entre sí (en cualquier orden) usando tanto
==
como
!=
, y los resultados de las comparaciones son consistentes.
__ComparisonCommonTypeWith
especifica que dos tipos comparten un tipo común, y un lvalue constante
o un rvalue no constante
(desde C++23)
de cualquiera de los tipos es convertible a ese tipo común.
Contenidos |
Requisitos semánticos
Estos conceptos se modelan solo si se satisfacen y todos los conceptos que subsumen están modelados.
En los siguientes párrafos, dada una expresión
E
y un tipo
C
,
CONVERT_TO
<
C
>
(
E
)
se define como:
|
(hasta C++23) |
|
(desde C++23) |
a
y
b
de tipo
T
,
bool
(
a
==
b
)
es
true
si y solo si
a
y
b
son iguales. Junto con el requisito de que
a
==
b
es
que preserva la igualdad
, esto implica que
==
es simétrico y transitivo, y además que
==
es reflexivo para todos los objetos
a
que son iguales al menos a otro objeto.
-
tyt2lvalues que denoten objetos distintos e iguales de tipos const std:: remove_reference_t < T > y std:: remove_cvref_t < T > respectivamente, -
uyu2lvalues que denoten objetos distintos e iguales de tipos const std:: remove_reference_t < U > y std:: remove_cvref_t < U > respectivamente, -
Csea std:: common_reference_t < const std:: remove_reference_t < T > & , const std:: remove_reference_t < U > & > ,
la siguiente expresión es verdadera:
- bool ( t == u ) == bool ( CONVERT_TO < C > ( t2 ) == CONVERT_TO < C > ( u2 ) ) .
-
t, un lvalue de tipo const std:: remove_reference_t < T > y -
u, un lvalue de tipo const std:: remove_reference_t < U > ,
se cumplen las siguientes condiciones:
- t == u , u == t , t ! = u , u ! = t tienen el mismo dominio;
- bool ( u == t ) == bool ( t == u ) ;
- bool ( t ! = u ) == ! bool ( t == u ) ; y
- bool ( u ! = t ) == bool ( t ! = u ) .
|
El concepto correspondiente
|
(hasta C++23) |
|
Sea
se cumplen las siguientes condiciones:
|
(desde C++23) |
Preservación de la igualdad
Las expresiones declaradas en las requires expressions de los conceptos de la biblioteca estándar deben ser equality-preserving (excepto cuando se indique lo contrario).
Variaciones de expresión implícita
Una requires expresión que utiliza una expresión que no modifica para algún operando constante lvalue también requiere variaciones de expresión implícitas .
Referencias
- Estándar C++23 (ISO/IEC 14882:2024):
-
-
18.5.4 Concepto
equality_comparable[concept.equalitycomparable]
-
18.5.4 Concepto
- Estándar C++20 (ISO/IEC 14882:2020):
-
-
18.5.3 Concepto
equality_comparable[concept.equalitycomparable]
-
18.5.3 Concepto