Espacios de nombres
Variantes
Acciones

std::swappable, std::swappable_with

De cppreference.com
< cpp‎ | concepts
Definido en el archivo de encabezado <concepts>
template<typename T>

concept swappable =
  requires(T& a, T& b){
    ranges::swap(a, b);

  };
(1) (desde C++20)
template<typename T, typename U>

concept swappable_with =
  std::common_reference_with<T, U>&&
  requires(T&& t, U&& u){
    ranges::swap(std::forward<T>(t), std::forward<T>(t));
    ranges::swap(std::forward<U>(u), std::forward<U>(u));
    ranges::swap(std::forward<T>(t), std::forward<U>(u));
    ranges::swap(std::forward<U>(u), std::forward<T>(t));

  };
(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.

close