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
| Definiert in Header <experimental/ranges/type_traits> |
||
| 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
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[edit] Siehe auch
| gibt an, dass ein Typ vertauscht werden kann oder dass zwei Typen miteinander vertauscht werden können (concept) | |
| (C++17)(C++17)(C++17)(C++17) |
prüft, ob Objekte eines Typs mit Objekten desselben oder eines anderen Typs vertauscht werden können (Klassenvorlage) |