Namensräume
Varianten
Aktionen

std::reference_constructs_from_temporary

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
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 reference_constructs_from_temporary;
(seit C++23)

Sei V std::remove_cv_t<U>, wenn U ein Skalar-Typ oder cv void ist, andernfalls U. Wenn T ein Referenztyp ist und für einen hypothetischen Ausdruck e gilt, dass decltype(e) V ist, und die Variablendefinition T ref(e); wohlgeformt ist und ein temporäres Objekt an ref bindet, dann ist das Elementkonstante value gleich true. Andernfalls ist value gleich false.

Wenn T ein Lvalue-Referenztyp auf einen const-, aber nicht flüchtig qualifizierten Objekttyp oder ein Rvalue-Referenztyp ist, müssen sowohl std::remove_reference_t<T> als auch std::remove_reference_t<U> vollständige Typen, cv void oder Arrays unbekannter Bindung sein; andernfalls 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 std::reference_constructs_from_temporary oder std::reference_constructs_from_temporary_v hinzufügt, ist das Verhalten undefiniert.

Inhalt

[bearbeiten] Hilfsvariablentemplate

template< class T, class U >

inline constexpr bool reference_constructs_from_temporary_v =

    std::reference_constructs_from_temporary<T, U>::value;
(seit C++23)

Abgeleitet von std::integral_constant

Member-Konstanten

value
[static]
true, wenn T ein Referenztyp ist, ein U-Wert an T bei direkter Initialisierung gebunden werden kann und ein temporäres Objekt an die Referenz gebunden würde, 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

std::reference_constructs_from_temporary kann verwendet werden, um einige Fälle abzulehnen, die immer zu veralteten Referenzen führen.

Es ist auch möglich, eine Member-Initialisierungsliste zu verwenden, um die Bindung eines temporären Objekts an eine Referenz abzulehnen, wenn der Compiler CWG1696 implementiert hat.

[bearbeiten] Beispiel

#include <type_traits>
 
static_assert(std::reference_constructs_from_temporary_v<int&&, int> == true);
static_assert(std::reference_constructs_from_temporary_v<const int&, int> == true);
static_assert(std::reference_constructs_from_temporary_v<int&&, int&&> == false);
static_assert(std::reference_constructs_from_temporary_v<const int&, int&&> == false);
static_assert(std::reference_constructs_from_temporary_v<int&&, long&&> == true);
static_assert(std::reference_constructs_from_temporary_v<int&&, long> == true);
 
int main() {}

[bearbeiten] Siehe auch

prüft, ob ein Typ einen Konstruktor für spezifische Argumente hat
(Klassenvorlage) [bearbeiten]
konstruiert ein neues tuple
(public member function of std::tuple<Types...>) [bearbeiten]
konstruiert ein neues pair
(public member function of std::pair<T1,T2>) [bearbeiten]
konstruiert ein Objekt mit einem Tupel von Argumenten
(Funktionsvorlage) [edit]