Namensräume
Varianten
Aktionen

std::is_swappable_with, std::is_swappable, std::is_nothrow_swappable_with, std::is_nothrow_swappable

Von cppreference.com
< cpp‎ | types
 
 
Metaprogrammierungsbibliothek
Typmerkmale
Typkategorien
(C++11)
(C++11)(DR*)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11) 
(C++11)
(C++11)
Typeneigenschaften
(C++11)
(C++11)
(C++14)
(C++11)(deprecated in C++26)
(C++11)(bis C++20*)
(C++11)(veraltet in C++20)
(C++11)
Typmerkmalskonstanten
Metafunktionen
(C++17)
Unterstützte Operationen
is_swappable_withis_swappableis_nothrow_swappable_withis_nothrow_swappable
(C++17)(C++17)(C++17)(C++17)

Beziehungen und Eigenschaftsabfragen
Typmodifikationen
(C++11)(C++11)(C++11)
Typentransformationen
(C++11)(veraltet in C++23)
(C++11)(veraltet in C++23)
(C++11)
(C++11)(bis C++20*)(C++17)

(C++11)
(C++11)
(C++17)
Rationale Arithmetik zur Compilezeit
Ganzzahlsequenzen zur Compilezeit
 
Definiert in der Kopfdatei <type_traits>
template< class T, class U >
struct is_swappable_with;
(1) (seit C++17)
template< class T >
struct is_swappable;
(2) (seit C++17)
template< class T, class U >
struct is_nothrow_swappable_with;
(3) (seit C++17)
template< class T >
struct is_nothrow_swappable;
(4) (seit C++17)
1) Wenn die Ausdrücke swap(std::declval<T>(), std::declval<U>()) und swap(std::declval<U>(), std::declval<T>()) in einem nicht ausgewerteten Kontext nach using std::swap; (siehe Swappable) wohlgeformt sind, liefert es die Mitgliedskonstante value gleich true. Andernfalls ist value false.
Zugriffsprüfungen erfolgen so, als ob aus einem Kontext, der von beiden Typen unabhängig ist.
3) Dasselbe wie (1), aber die Auswertung beider Ausdrücke aus (1) ist dafür bekannt, keine Ausnahmen auszulösen.
 Typ-Trait  Der Wert der Mitgliedskonstante value
T ist ein referenzierbarer Typ  T ist kein referenzierbarer Typ 
(2) std::is_swappable_with<T&, T&>::value false
(4) std::is_nothrow_swappable_with<T&, T&>::value

Wenn T oder U kein vollständiger Typ ist, (möglicherweise cv-qualifiziert) void oder ein Array unbekannter Bindung, ist das Verhalten undefiniert.

Wenn eine Instanziierung einer Vorlage davon direkt oder indirekt von einem unvollständigen Typ abhängt und diese Instanziierung ein anderes Ergebnis liefern könnte, wenn dieser Typ hypothetisch vervollständigt würde, ist das Verhalten undefiniert.

Wenn das Programm Spezialisierungen für eine der auf dieser Seite beschriebenen Vorlagen hinzufügt, ist das Verhalten undefiniert.

Inhalt

[bearbeiten] Hilfsvariablen-Vorlagen

template< class T, class U >
inline constexpr bool is_swappable_with_v = is_swappable_with<T, U>::value;
(seit C++17)
template< class T >
inline constexpr bool is_swappable_v = is_swappable<T>::value;
(seit C++17)
template< class T, class U >

inline constexpr bool is_nothrow_swappable_with_v =

    is_nothrow_swappable_with<T, U>::value;
(seit C++17)
template< class T >

inline constexpr bool is_nothrow_swappable_v =

    is_nothrow_swappable<T>::value;
(seit C++17)

Abgeleitet von std::integral_constant

Member-Konstanten

value
[static]
true, wenn T mit U vertauschbar 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>

[bearbeiten] Hinweise

Dieser Trait prüft nichts außerhalb des unmittelbaren Kontexts der Swap-Ausdrücke: Wenn die Verwendung von T oder U Vorlagenspezialisierungen auslösen würde, die Generierung von implizit definierten speziellen Member-Funktionen usw. und diese Fehler haben, wird der tatsächliche Swap möglicherweise nicht kompiliert, auch wenn std::is_swappable_with<T, U>::value kompiliert und zu true ausgewertet wird.

[bearbeiten] Beispiel

[bearbeiten] Siehe auch

tauscht die Werte von zwei Objekten
(Funktionsvorlage) [edit]
prüft, ob ein Typ einen Verschiebezuweisungsoperator hat
(Klassenvorlage) [bearbeiten]
gibt an, dass ein Typ vertauscht werden kann oder dass zwei Typen miteinander vertauscht werden können
(Konzept) [bearbeiten]