std::variant<Types...>::~variant
Von cppreference.com
~variant(); |
(seit C++17) (constexpr seit C++20) |
|
Wenn valueless_by_exception() true ist, tut nichts. Andernfalls wird das aktuell enthaltene Objekt zerstört.
Dieser Destruktor ist trivial, wenn std::is_trivially_destructible_v<T_i> für alle T_i in Types... true ist.
[bearbeiten] Hinweise
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_variant |
202106L |
(C++20) (DR) |
Vollständig constexpr std::variant |
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <cstdio> #include <variant> int main() { struct X { ~X() { puts("X::~X();"); } }; struct Y { ~Y() { puts("Y::~Y();"); } }; { puts("entering block #1"); std::variant<X,Y> var; puts("leaving block #1"); } { puts("entering block #2"); std::variant<X,Y> var{ std::in_place_index_t<1>{} }; // constructs var(Y) puts("leaving block #2"); } }
Ausgabe
entering block #1 leaving block #1 X::~X(); entering block #2 leaving block #2 Y::~Y();
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| P2231R1 | C++20 | der Destruktor war nicht constexpr, während nicht-triviale Destruktoren in C++20 constexpr sein können | zu constexpr gemacht |