std::experimental::ranges:: swap
|
Definiert im Header
<experimental/ranges/utility>
|
||
|
namespace
{
constexpr
/* unspecified */
swap
=
/* unspecified */
;
|
(ranges TS)
(Anpassungspunktobjekt) |
|
|
Aufrufsignatur
|
||
|
template
<
class
T,
class
U
>
requires
/* siehe unten */
|
||
Tauscht die Werte aus, auf die t und u verweisen.
Ein Aufruf von
ranges::swap
ist äquivalent zu:
- template < class T > void swap ( T & , T & ) = delete ;
- template < class T, std:: size_t N > void swap ( T ( & ) [ N ] , T ( & ) [ N ] ) = delete ;
-
alle Deklarationen von
swap, die durch argumentabhängige Suche gefunden werden.
T
und
U
Lvalue-Referenzen auf Array-Typen gleicher Ausdehnung (aber möglicherweise unterschiedlicher Elementtypen) sind und
ranges::
swap
(
*
t,
*
u
)
ein gültiger Ausdruck ist.
T
und
U
beide
V&
für einen Typ
V
sind, der die syntaktischen Anforderungen von
MoveConstructible
<
V
>
und
Assignable
<
V
&
, V
>
erfüllt, tauscht die referenzierten Werte wie durch
V v
{
std
::
move
(
t
)
}
;
t
=
std
::
move
(
u
)
;
u
=
std
::
move
(
v
)
;
. Wenn die semantischen Anforderungen eines der Konzepte nicht erfüllt sind, ist das Programm fehlerhaft; keine Diagnose erforderlich.
ranges::swap
fehlerhaft.
ranges:: swap kann in einem konstanten Ausdruck verwendet werden, wenn jede Funktion, die es aufruft (wie oben spezifiziert), ebenfalls so verwendet werden kann.
Inhaltsverzeichnis |
Customization Point Objects
Der Name
ranges::swap
bezeichnet ein
Customization Point Object
, welches ein
Funktionsobjekt
eines
Literal
Semiregular
-Klassentyps ist (zur Veranschaulichung als
SwapT
bezeichnet). Alle Instanzen von
SwapT
sind gleich. Daher kann
ranges::swap
frei kopiert werden und seine Kopien können austauschbar verwendet werden.
Gegeben eine Menge von Typen
Args...
, falls
std::
declval
<
Args
>
(
)
...
die Anforderungen für Argumente von
ranges::swap
oben erfüllen, wird
SwapT
ranges
::
Invocable
<
const
SwapT, Args...
>
erfüllen. Andernfalls beteiligt sich kein Funktionsaufrufoperator von
SwapT
an der Überladungsauflösung.
In jeder Übersetzungseinheit, in der
ranges::swap
definiert ist, verweist es auf dieselbe Instanz des Customization Point Objects. (Dies bedeutet, dass es frei in Dingen wie Inline-Funktionen und Funktionsvorlagen verwendet werden kann, ohne das
One-Definition-Rule
zu verletzen.)
Exceptions
swap
wie oben beschrieben gefunden wird.
std:: is_nothrow_move_assignable < V > :: value )
Beispiel
|
Dieser Abschnitt ist unvollständig
Grund: Kein Beispiel |
Siehe auch
|
tauscht die Werte zweier Objekte
(Funktions-Template) |