Namespaces
Variants

std:: reference_constructs_from_temporary

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Definiert im Header <type_traits>
template < class T, class U >
struct reference_constructs_from_temporary ;
(seit C++23)

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

Wenn T ein Lvalue-Referenztyp auf einen const- aber nicht volatile-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 Grenze sein; andernfalls ist das Verhalten undefiniert.

Wenn eine Instanziierung einer obigen Vorlage 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.

Inhaltsverzeichnis

Hilfsvariablen-Template

template < class T, class U >

inline constexpr bool reference_constructs_from_temporary_v =

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

Geerbt von std:: integral_constant

Member-Konstanten

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

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

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

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() {}

Siehe auch

prüft, ob ein Typ einen Konstruktor für bestimmte Argumente besitzt
(Klassen-Template)
konstruiert ein neues tuple
(öffentliche Mitgliedsfunktion von std::tuple<Types...> )
konstruiert ein neues pair
(öffentliche Mitgliedsfunktion von std::pair<T1,T2> )
konstruiert ein Objekt mit einem Tupel von Argumenten
(Funktions-Template)