std::optional::~optional - std::optional::~optional
~optional(); (since C++17)
(until C++20)
constexpr ~optional(); (since C++20)
If the object contains a value and the type T is not trivially destructible
(see
std::is_trivially_destructible), destroys the contained value by calling its
destructor, as if by value().T::~T().
Otherwise, does nothing.
If T is trivially-destructible, then this destructor is also
trivial, so
std::optional<T> is also trivially-destructible.
Defect reports
The following behavior-changing defect reports were applied retroactively to
previously published C++ standards.
DR Applied to Behavior as published Correct behavior
the destructor was not constexpr while
P2231R1 C++20 non-trivial destructors can be constexpr in made constexpr
C++20