Namespaces
Variants

std::experimental::ranges:: swap

From cppreference.net
Défini dans l'en-tête <experimental/ranges/utility>
namespace {

constexpr /* non spécifié */ swap = /* non spécifié */ ;

}
(ranges TS)
(objet de point de personnalisation)
Signature d'appel
template < class T, class U >

requires /* voir ci-dessous */

void swap ( T && t, U && u ) noexcept ( /* voir ci-dessous */ ) ;

Échange les valeurs référencées par t et u .

Un appel à ranges::swap est équivalent à :

1) ( void ) swap ( std:: forward < T > ( t ) , std:: forward < U > ( u ) ) , si cette expression est valide, où la résolution de surcharge est effectuée avec les candidats suivants :
Si la fonction sélectionnée par la résolution de surcharge n'échange pas les valeurs référencées par t et u , le programme est mal formé ; aucun diagnostic requis.
2) Sinon, ( void ) ranges:: swap_ranges ( t, u ) , si T et U sont des références lvalue vers des types tableau de même étendue (mais potentiellement de types d'éléments différents) et que ranges:: swap ( * t, * u ) est une expression valide.
3) Sinon, si T et U sont tous deux V& pour un certain type V qui satisfait aux exigences syntaxiques de MoveConstructible < V > et Assignable < V & , V > , échange les valeurs référencées comme par V v { std :: move ( t ) } ; t = std :: move ( u ) ; u = std :: move ( v ) ; . Si les exigences sémantiques de l'un ou l'autre concept ne sont pas satisfaites, le programme est mal formé ; aucun diagnostic requis.
4) Dans tous les autres cas, un appel à ranges::swap est mal formé.

ranges:: swap peut être utilisé dans une expression constante si chaque fonction qu'il appelle (tel que spécifié ci-dessus) peut l'être également.

Table des matières

Objets de point de personnalisation

Le nom ranges::swap désigne un point de personnalisation , qui est un objet fonction d'un type littéral Semiregular (désigné, à des fins d'exposition, comme SwapT ). Toutes les instances de SwapT sont égales. Ainsi, ranges::swap peut être copié librement et ses copies peuvent être utilisées de manière interchangeable.

Étant donné un ensemble de types Args... , si std:: declval < Args > ( ) ... satisfont aux exigences pour les arguments de ranges::swap ci-dessus, SwapT satisfera ranges :: Invocable < const SwapT, Args... > . Sinon, aucun opérateur d'appel de fonction de SwapT ne participe à la résolution de surcharge.

Dans chaque unité de traduction où ranges::swap est défini, il fait référence à la même instance de l'objet point de personnalisation. (Cela signifie qu'il peut être utilisé librement dans des éléments comme les fonctions inline et les modèles de fonction sans violer la règle de définition unique .)

Exceptions

1)
noexcept spécification :
noexcept ( noexcept ( ( void ) swap ( std:: forward < T > ( t ) , std:: forward < T > ( u ) ) ) )
, où swap est trouvé comme décrit ci-dessus.
2)
noexcept spécification :
noexcept ( noexcept ( ranges:: swap ( * t, * u ) ) )
3)
noexcept spécification :

Exemple

Voir aussi

échange les valeurs de deux objets
(modèle de fonction)