std:: reference_constructs_from_temporary
|
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
=
|
(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
|
(C++11)
(C++11)
(C++11)
|
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>
)
|
|
|
(C++17)
|
konstruiert ein Objekt mit einem Tupel von Argumenten
(Funktions-Template) |