|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Member functions | ||||
variant::~variant | ||||
| Observers | ||||
| Modifiers | ||||
| Visitation | ||||
(C++26) | ||||
| Non-member functions | ||||
| Helper classes | ||||
| Helper objects | ||||
~variant(); | (since C++17) (constexpr since C++20) | |
Ifvalueless_by_exception() istrue, does nothing. Otherwise, destroys the currently contained object.
This destructor is trivial ifstd::is_trivially_destructible_v<T_i> istrue for allT_i inTypes....
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_variant | 202106L | (C++20) (DR) | Fullyconstexprstd::variant |
#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");}}
Output:
entering block #1leaving block #1X::~X();entering block #2leaving block #2Y::~Y();
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| P2231R1 | C++20 | the destructor was notconstexpr while non-trivial destructors can beconstexpr in C++20 | madeconstexpr |