std:: totally_ordered, std:: totally_ordered_with
|
Definido en el encabezado
<concepts>
|
||
|
template
<
class
T
>
concepto totalmente_ordenado
=
|
(1) | (desde C++20) |
|
template
<
class
T,
class
U
>
concepto totalmente_ordenado_con
=
|
(2) | (desde C++20) |
|
Conceptos auxiliares
|
||
|
template
<
class
T,
class
U
>
concepto __PartiallyOrderedWith
=
|
(3) | ( solo para exposición* ) |
std::totally_ordered
especifica que los operadores de comparación
==,!=,<,>,<=,>=
en un tipo producen resultados consistentes con un
orden total estricto
en el tipo.
std::totally_ordered_with
especifica que los operadores de comparación
==,!=,<,>,<=,>=
en operandos (posiblemente mixtos) de
T
y
U
producen resultados consistentes con un orden total estricto. La comparación de operandos mixtos produce resultados equivalentes a comparar los operandos convertidos a su tipo común.
__PartiallyOrderedWith
especifica que un valor de tipo
T
y un valor de tipo
U
pueden ser comparados en un orden parcial entre sí (en cualquier orden) usando
<
,
>
,
<=
, y
>=
, y los resultados de las comparaciones son consistentes.
Contenidos |
Requisitos semánticos
Estos conceptos se modelan solo si se satisfacen y todos los conceptos que subsumen están modelados.
a
,
b
y
c
de tipo
const
std::
remove_reference_t
<
T
>
:
- Exactamente uno de bool ( a < b ) , bool ( a > b ) y bool ( a == b ) es true ;
- Si bool ( a < b ) y bool ( b < c ) son ambos true , entonces bool ( a < c ) es true ;
- bool ( a > b ) == bool ( b < a )
- bool ( a >= b ) == ! bool ( a < b )
- bool ( a <= b ) == ! bool ( b < a )
-
tyt2, lvalues que denotan objetos distintos e iguales de tipos const std:: remove_reference_t < T > y std:: remove_reference_t < T > respectivamente, y -
uyu2, lvalues que denotan objetos distintos e iguales de tipos const std:: remove_reference_t < U > y std:: remove_reference_t < U > respectivamente,
sea
C
el
std::
common_reference_t
<
const
std::
remove_reference_t
<
T
>
&
,
const
std::
remove_reference_t
<
U
>
&
>
, y, dada una expresión
E
y un tipo
C
, sea
CONVERT_TO
<
C
>
(
E
)
:
|
(hasta C++23) |
|
(desde C++23) |
lo siguiente es cierto:
- 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 ) )
-
cualquier lvalue
tde tipo const std:: remove_reference_t < T > , y -
cualquier lvalue
ude tipo const std:: remove_reference_t < U > ,
lo siguiente es verdadero:
- t < u , t <= u , t > u , t >= u , u < t , u <= t , u > t , y u >= t tienen el mismo dominio;
- bool ( t < u ) == bool ( u > t ) ;
- bool ( u < t ) == bool ( t > u ) ;
- bool ( t <= u ) == bool ( u >= t ) ; y
- bool ( u <= t ) == bool ( t >= u ) .
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.5 Concepto
totally_ordered[concept.totallyordered]
-
18.5.5 Concepto
- Estándar C++20 (ISO/IEC 14882:2020):
-
-
18.5.4 Concepto
totally_ordered[concept.totallyordered]
-
18.5.4 Concepto
Véase también
|
especifica que el operador
<=>
produce un resultado consistente en los tipos dados
(concept) |