std::reference_constructs_from_temporary
| 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 = |
(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
| (C++11)(C++11)(C++11) |
prüft, ob ein Typ einen Konstruktor für spezifische Argumente hat (Klassenvorlage) |
konstruiert ein neues tuple(public member function of std::tuple<Types...>) | |
konstruiert ein neues pair(public member function of std::pair<T1,T2>) | |
| (C++17) |
konstruiert ein Objekt mit einem Tupel von Argumenten (Funktionsvorlage) |