Namespaces
Variants

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

From cppreference.net
Défini dans l'en-tête <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)

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

Le concept SwappableWith<T, U> spécifie que les expressions du type et de la catégorie de valeur encodés par T et U sont échangeables l'une avec l'autre. SwappableWith<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é 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é

Une expression est préservatrice d'égalité si elle produit des résultats égaux pour des entrées égales.

  • Les entrées d'une expression consistent en ses opérandes.
  • Les sorties d'une expression consistent en son résultat et tous les opérandes modifiés par l'expression (le cas échéant).

Toute expression devant préserver l'égalité doit en outre être stable : deux évaluations d'une telle expression avec les mêmes objets d'entrée doivent produire des sorties égales en l'absence de toute modification explicite intervenant entre-temps sur ces objets d'entrée.

Sauf indication contraire, toute expression utilisée dans une requires-expression doit être égalité-préservante et stable, et l'évaluation de l'expression ne peut modifier que ses opérandes non constants. Les opérandes constants ne doivent pas être modifiés.