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