Namespaces
Variants

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

From cppreference.net
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 > ( ) ) beide wohlgeformt sind, wenn sie als nicht ausgewerteter Operand behandelt werden, stellt die Member-Konstante value gleich true bereit. Andernfalls ist value gleich false . Zugriffsprüfungen werden durchgeführt, als ob aus einem Kontext, der mit keinem der beiden Typen in Beziehung steht.
2) Falls T kein referenzierbarer Typ ist (d.h. möglicherweise cv-qualifiziertes void oder ein Funktionstyp mit einer cv-qualifier-seq oder einem ref-qualifier ), liefert die Konstante value den Wert false . Andernfalls liefert die Konstante value den Wert ranges :: is_swappable_with < T & , T & > :: value .
3) Gleich wie (1) , aber die Auswertungen beider Ausdrücke aus (1) sind bekannt, dass sie keine Ausnahmen werfen.
4) Gleich wie (2) , verwendet jedoch is_nothrow_swappable_with .

T und U müssen jeweils ein vollständiger Typ sein, (möglicherweise cv-qualifiziert) void , oder ein Array unbekannter Größe. Andernfalls ist das Verhalten undefiniert.

Inhaltsverzeichnis

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)
**Anmerkung:** - Alle C++-spezifischen Begriffe (wie `template`, `class`, `constexpr`, `bool`, `value` etc.) wurden gemäß Anforderung nicht übersetzt - HTML-Tags und Attribute bleiben unverändert - Code-Blöcke innerhalb von ` ` wurden original belassen - Nur strukturelle Beschriftungen wurden lokalisiert

Geerbt von std:: integral_constant

Member-Konstanten

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

Member-Funktionen

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

Member-Typen

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

Hinweise

Dieses Merkmal überprüft nichts außerhalb des unmittelbaren Kontexts der Swap-Ausdrücke: Wenn die Verwendung von T oder U Template-Spezialisierungen, die Generierung implizit definierter spezieller Memberfunktionen etc. auslösen würde und diese Fehler enthalten, könnte der tatsächliche Swap möglicherweise nicht kompilieren, selbst wenn ranges::is_swappable_with<T,U>::value kompiliert und zu true ausgewertet wird.

Beispiel

Siehe auch

spezifiziert, dass ein Typ ausgetauscht werden kann oder dass zwei Typen miteinander ausgetauscht werden können
(Konzept)
prüft, ob Objekte eines Typs mit Objekten desselben oder eines anderen Typs ausgetauscht werden können
(Klassentemplate)