Namespaces
Variants

std:: swappable, std:: swappable_with

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

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

} ;
(1) (desde C++20)
template < class T, class 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 los lvalues de tipo T son intercambiables.

El concepto swappable_with<T, U> especifica que las expresiones del tipo y categoría de valor codificadas por T y U son intercambiables entre sí. swappable_with<T, U> se satisface solo 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

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).

Referencias

  • Estándar C++23 (ISO/IEC 14882:2024):
  • 18.4.9 Concepto swappable [concept.swappable]
  • Estándar C++20 (ISO/IEC 14882:2020):
  • 18.4.9 Concepto swappable [concept.swappable]