Namespaces
Variants

std::experimental::ranges:: Swappable, std::experimental::ranges:: SwappableWith

From cppreference.net
Definido en el encabezado <experimental/ranges/concepts>
template < class T >

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

} ;
(1) (ranges TS)
template < class T, class U >

concept bool SwappableWith =
CommonReference <
const std:: remove_reference_t < T > & ,
const std:: remove_reference_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) (ranges TS)

El concepto Swappable<T> especifica que los lvalues de tipo T son intercambiables.

El concepto SwappableWith<T, U> especifica que las expresiones del tipo y categoría de valor codificadas por T y U son intercambiables entre sí. SwappableWith<T, U> se satisface únicamente 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 ranges:: swap ( t, u ) o ranges:: swap ( u, t ) , t2 es igual a u y u2 es igual a t .

Preservación de la igualdad

Una expresión es equality preserving si produce 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 los hay).

Toda expresión que deba preservar la igualdad debe además ser estable : dos evaluaciones de dicha expresión con los mismos objetos de entrada deben producir salidas iguales, a menos que exista una modificación explícita e intermedia de esos objetos de entrada.

A menos que se indique lo contrario, toda expresión utilizada en una requires-expression debe ser de preservación de igualdad y estable, y la evaluación de la expresión solo puede modificar sus operandos no constantes. Los operandos que son constantes no deben modificarse.