Spec-Zone.ru › C++

std::expected<T,E>::~expected

constexpr ~expected();
(начиная с C++23)

Деструктор основного шаблона

Уничтожает содержащееся значение:

  • Если has_value() имеет значение true, уничтожает ожидаемое значение.
  • В противном случае уничтожает неожиданное значение.

Этот деструктор является тривиальным, если std::is_trivially_destructible_v<T> и std::is_trivially_destructible_v<E> оба имеют значение true.

Частичная специализация деструктора для void

Если has_value() имеет значение false, уничтожает неожиданное значение.

Этот деструктор является тривиальным, если std::is_trivially_destructible_v<E> имеет значение true.

Пример

#include <expected>
#include <iostream>
#include <source_location>

inline
void name(int x, std::source_location sloc = std::source_location::current())
{
    std::cout << sloc.function_name() << " : " << x << '\n';
}

struct Value
{
    int m{};
    ~Value() { name(m); }
};

struct Error
{
    int e{};
    ~Error() { name(e); }
};

int main()
{
    std::expected<Value, Error> e1 {42};
    std::expected<Value, Error> e2 {std::unexpect, 13};
    std::expected<void, Error>  e3 {std::unexpect, 37};
}

Возможный вывод:

Error::~Error : 37
Error::~Error : 13
Value::~Value : 42

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/utility/expected/~expected

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API