std::experimental::ranges:: swap
|
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 */
|
||
Échange les valeurs référencées par t et u .
Un appel à
ranges::swap
est équivalent à :
- template < class T > void swap ( T & , T & ) = delete ;
- template < class T, std:: size_t N > void swap ( T ( & ) [ N ] , T ( & ) [ N ] ) = delete ;
-
toute déclaration de
swaptrouvée par la recherche dépendante des arguments .
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.
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.
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
swap
est trouvé comme décrit ci-dessus.
std:: is_nothrow_move_assignable < V > :: value )
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
Voir aussi
|
échange les valeurs de deux objets
(modèle de fonction) |