std::optional<T>::~optional
Материал из cppreference.com
~optional(); | (начиная с C++17) (до C++20) | |
constexpr ~optional(); | (начиная с C++20) | |
Если объект содержит значение и тип T
не является тривиально разрушаемым (смотрите std::is_trivially_destructible), уничтожает содержащееся значение, вызывая его деструктор, как если бы value().T::~T().
Иначе ничего не делает.
[править]Примечание
Если T
тривиально разрушаем, то и этот деструктор также тривиален, поэтому std::optional<T> также тривиально разрушаем.
[править]Отчёты о дефектах
Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:
Номер | Применён | Поведение в стандарте | Корректное поведение |
---|---|---|---|
WG не указан | C++20 | деструктор не был constexpr, в то время как нетривиальные деструкторы могут быть constexpr в C++20 | сделан constexpr |