std::reference_converts_from_temporary
| Definiert in der Kopfdatei <type_traits> |
||
| template< class T, class U > struct reference_converts_from_temporary; |
(seit C++23) | |
Sei V std::remove_cv_t<U>, wenn U ein skalarer Typ oder cv void ist, andernfalls U. Wenn T ein Referenztyp ist und ein hypothetischer Ausdruck e gegeben ist, so dass decltype(e) V ist, die Variable-Definition T ref = e; wohlgeformt ist und ein temporäres Objekt an ref bindet, dann wird das Mitgliedskonstant value gleich true bereitgestellt. Andernfalls ist value false.
Wenn T ein lvalue-Referenztyp auf einen nur mit const- aber nicht mit 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 Grösse 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_converts_from_temporary oder std::reference_converts_from_temporary_v hinzufügt, ist das Verhalten undefiniert.
Inhalt |
[edit] Hilfsvariablentemplate
| template< class T, class U > inline constexpr bool reference_converts_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 in der Kopierinitialisierung gebunden werden kann und ein temporäres Objekt an die Referenz gebunden würde, andernfalls false(ö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> |
[edit] Anmerkungen
std::reference_converts_from_temporary kann verwendet werden, um einige Fälle abzulehnen, die immer zu hängenden Referenzen führen.
[edit] Beispiel
#include <type_traits> int main() {} static_assert( std::reference_converts_from_temporary_v<int&&, int> == true && std::reference_converts_from_temporary_v<const int&, int> == true && std::reference_converts_from_temporary_v<int&&, int&&> == false && std::reference_converts_from_temporary_v<const int&, int&&> == false && std::reference_converts_from_temporary_v<int&&, long&&> == true && std::reference_converts_from_temporary_v<int&&, long> == true);
[edit] Siehe auch
| (C++11)(C++20) |
prüft, ob ein Typ in den anderen Typ konvertierbar ist (Klassenvorlage) |
| (C++17)(C++23) |
ruft jedes Callable-Objekt mit gegebenen Argumenten auf und der Möglichkeit, den Rückgabetyp anzugeben(seit C++23) (Funktions-Template) |
| (C++11) |
bindet ein oder mehrere Argumente an ein Funktions-Objekt (Funktions-Template) |
| (C++17) |
ruft den bereitgestellten Funktor mit den von einem oder mehreren variants gehaltenen Argumenten auf(function template) |
konstruiert eine neue std::function Instanz(public member function of std::function<R(Args...)>) | |
erzeugt ein neues std::move_only_function-Objekt(public member function of std::move_only_function) | |
| konstruiert das Task-Objekt (public member function of std::packaged_task<R(Args...)>) |