Namespaces
Variants

std:: swappable, std:: swappable_with

From cppreference.net
Défini dans l'en-tête <concepts>
template < class T >

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

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

Le concept swappable<T> spécifie que les lvalues de type T sont échangeables.

Le concept swappable_with<T, U> spécifie que les expressions du type et de la catégorie de valeur encodées par T et U sont interchangeables entre elles. swappable_with<T, U> n'est satisfait que si un appel à ranges:: swap ( t, u ) échange la valeur de t et u , c'est-à-dire, étant donnés des objets distincts t2 égaux à t et u2 égaux à u , après l'évaluation soit de ranges:: swap ( t, u ) soit de ranges:: swap ( u, t ) , t2 est égal à u et u2 est égal à t .

Préservation de l'égalité

Les expressions déclarées dans les requires expressions des concepts de la bibliothèque standard doivent être equality-preserving (sauf indication contraire).

Références

  • Norme C++23 (ISO/CEI 14882:2024) :
  • 18.4.9 Concept swappable [concept.swappable]
  • Norme C++20 (ISO/IEC 14882:2020) :
  • 18.4.9 Concept swappable [concept.swappable]