Namespaces
Variants

std::optional<T>:: ~optional

From cppreference.net
Utilities library
~optional ( ) ;
(начиная с C++17)
(constexpr начиная с C++20)

Если объект содержит значение и тип T не является тривиально разрушаемым (см. std::is_trivially_destructible ), уничтожает содержащееся значение путем вызова его деструктора, как если бы с помощью value ( ) . T :: ~T ( ) .

В противном случае ничего не делает.

Примечания

Если T является тривиально-разрушаемым, то этот деструктор также является тривиальным, поэтому std:: optional < T > также является тривиально-разрушаемым.

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_optional 202106L (C++20)
(DR20)
Полностью constexpr

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Применяется к Поведение в опубликованной версии Корректное поведение
P2231R1 C++20 деструктор не был constexpr в то время как нетривиальные деструкторы могут быть constexpr в C++20 сделан constexpr