std::swappable, std::swappable_with
Definido en el archivo de encabezado <concepts> | ||
template<typename T> concept swappable = | (1) | (desde C++20) |
template<typename T, typename U> concept swappable_with = | (2) | (desde C++20) |
El concepto swappable<T>
especifica que lvalues de tipo T
son intercambiables.
El concepto swappable_with<T, U>
especifica que expresiones del tipo y la categoría de valor codificada por T
y U
son intercambiables la una con la otra. swappable_with<T, U>
se satisface solamente si una llamada a ranges::swap(t, u) intercambia el valor de t
y u
, es decir, dados objetos distintos t2
igual a t
y u2
igual a u
, después de evaluar ya sea a ranges::swap(t, u) o a ranges::swap(u, t), t2
es igual a u
y u2
es igual a t
.
[editar]Conservación de la igualdad
Una expresión es conservadora de igualdad si resulta en salidas iguales dadas entradas iguales.
- Las entradas de una expresión consisten en sus operandos.
- Las salidas de una expresión consisten en su resultado y todos los operandos modificados por la expresión (si es que los hay).
Cada expresión que se requiere sea conservadora de igualdad, se requiere además que sea estable: dos evaluaciones de tal expresión con los mismos objetos de entrada debe tener salidas iguales si no se encuentra alguna modificación interventora de esos objetos de entrada.
A menos que se indique de otra manera, cada expresión utilizada en una expresión-requiere se requiere sea conservadora de igualdad y estable, y la evaluación de la expresión puede solamente modificar sus operandos no constantes. Los operandos que son constantes no deben ser modificados.