std::variant<Types...>::~variant
Depuis fr.cppreference.net
~variant();
|
(depuis C++17) (constexpr depuis C++20) |
|
Si valueless_by_exception() est true, ne fait rien. Sinon, détruit l'objet actuellement contenu.
Ce destructeur est trivial si std::is_trivially_destructible_v<T_i> est true pour tout T_i dans Types....
Notes
| Macro de test de fonctionnalité | Valeur | Std | Fonctionnalité |
|---|---|---|---|
__cpp_lib_variant
|
202106L
|
(C++20)
(DR) |
std::variant
entièrement
constexpr
|
Exemple
Exécuter ce code
#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"); } }
Sortie :
entering block #1 leaving block #1 X::~X(); entering block #2 leaving block #2 Y::~Y();
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| P2231R1 | C++20 | le destructeur n'était pas constexpr alors que les destructeurs non triviaux peuvent être constexpr en C++20 | rendu constexpr |