Namespaces
Variants

std:: swappable, std:: swappable_with

From cppreference.net
Definiert im Header <concepts>
template < class T >

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

} ;
(1) (seit 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) (seit C++20)

Das Konzept swappable<T> spezifiziert, dass Lvalues vom Typ T austauschbar sind.

Das Konzept swappable_with<T, U> spezifiziert, dass Ausdrücke des Typs und der Wertkategorie, die durch T und U kodiert werden, miteinander austauschbar sind. swappable_with<T, U> ist nur dann erfüllt, wenn ein Aufruf von ranges:: swap ( t, u ) die Werte von t und u austauscht, das heißt, wenn für zwei verschiedene Objekte t2 gleich t und u2 gleich u nach Auswertung von entweder ranges:: swap ( t, u ) oder ranges:: swap ( u, t ) , t2 gleich u und u2 gleich t ist.

Gleichheitserhaltung

Ausdrücke, die in requires expressions der Standardbibliothek-Konzepte deklariert werden, müssen equality-preserving sein (sofern nicht anders angegeben).

Referenzen

  • C++23-Standard (ISO/IEC 14882:2024):
  • 18.4.9 Konzept swappable [concept.swappable]
  • C++20-Standard (ISO/IEC 14882:2020):
  • 18.4.9 Konzept swappable [concept.swappable]