Namensräume
Varianten
Aktionen

std::experimental::ranges::is_swappable_with, std::experimental::ranges::is_swappable, std::experimental::ranges::is_nothrow_swappable_with, std::experimental::ranges::is_nothrow_swappable

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
Allgemeine Dienstprogramme-Bibliothek
Hilfskomponenten
Funktionsobjekte
Metaprogrammierung und Typ-Traits
is_swappable_withis_swappable
is_nothrow_swappable_withis_nothrow_swappable
Getaggte Paare und Tupel
                          
Tag-Spezifizierer
                                      
                          
 
template< class T, class U >
struct is_swappable_with;
(1) (Ranges TS)
template< class T >
struct is_swappable;
(2) (Ranges TS)
template< class T, class U >
struct is_nothrow_swappable_with;
(3) (Ranges TS)
template< class T >
struct is_nothrow_swappable;
(4) (Ranges TS)
1) Wenn die Ausdrücke ranges::swap(std::declval<T>(), std::declval<U>()) und ranges::swap(std::declval<U>(), std::declval<T>()), wenn sie als nicht evaluierter Operand behandelt werden, gut geformt sind, liefert die Member-Konstante value gleich true. Andernfalls ist value false. Zugriffsprüfungen werden so durchgeführt, als kämen sie aus einem Kontext, der von keinem der beiden Typen unabhängig ist.
2) Wenn T kein referenzierbarer Typ ist (d.h. möglicherweise cv-qualifiziertes void oder ein Funktionstyp mit einem cv-qualifier-seq oder einem ref-qualifier), liefert eine Member-Konstante value gleich false. Andernfalls liefert eine Member-Konstante value gleich ranges::is_swappable_with<T&, T&>::value.
3) Wie (1), aber Auswertungen beider Ausdrücke aus (1) werfen bekanntermaßen keine Ausnahmen.
4) Wie (2), verwendet aber is_nothrow_swappable_with.

T und U müssen jeweils ein vollständiger Typ sein (möglicherweise cv-qualifiziertes void) oder ein Array mit unbekannter Grenze. Andernfalls ist das Verhalten undefiniert.

Inhalt

[edit] Hilfsvariablen-Templates

template< class T, class U >
constexpr bool is_swappable_with_v = is_swappable_with<T, U>::value;
(1) (Ranges TS)
template< class T >
constexpr bool is_swappable_v = is_swappable<T>::value;
(2) (Ranges TS)
template< class T, class U >
constexpr bool is_nothrow_swappable_with_v = is_nothrow_swappable_with<T, U>::value;
(3) (Ranges TS)
template< class T >
constexpr bool is_nothrow_swappable_v = is_nothrow_swappable<T>::value;
(4) (Ranges TS)

Abgeleitet von std::integral_constant

Member-Konstanten

value
[static]
true, wenn T mit U tauschbar ist, false andernfalls
(öffentliche statische Member-Konstante)

Memberfunktionen

operator bool
konvertiert das Objekt zu bool, gibt value zurück
(öffentliche Memberfunktion)
operator()
(C++14)
gibt value zurück
(öffentliche Memberfunktion)

Membertypen

Typ Definition
value_type bool
type std::integral_constant<bool, value>

[edit] Anmerkungen

Diese Eigenschaft prüft nichts außerhalb des unmittelbaren Kontexts der Tausch-Ausdrücke: Wenn die Verwendung von T oder U zu Template-Spezialisierungen, zur Generierung von implizit definierten speziellen Member-Funktionen usw. führt und diese Fehler aufweisen, schlägt der eigentliche Tausch möglicherweise auch dann fehl, wenn ranges::is_swappable_with<T,U>::value kompiliert und zu true ausgewertet wird.

[edit] Beispiel

[edit] Siehe auch

gibt an, dass ein Typ vertauscht werden kann oder dass zwei Typen miteinander vertauscht werden können
(concept) [bearbeiten]
prüft, ob Objekte eines Typs mit Objekten desselben oder eines anderen Typs vertauscht werden können
(Klassenvorlage) [bearbeiten]