Namespaces
Variants
Actions

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

From cppreference.com
< cpp‎ | utility‎ | expected
 
 
 
 
constexpr ~expected();
(since C++23)

[edit] Main template destructor

Destroys the contained value:

  • If has_value() is true, destroys the expected value.
  • Otherwise, destroys the unexpected value.

This destructor is trivial if std::is_trivially_destructible_v<T> and std::is_trivially_destructible_v<E> are both true.

[edit] void partial specialization destructor

If has_value() is false, destroys the unexpected value.

This destructor is trivial if std::is_trivially_destructible_v<E> is true.

[edit] Example

#include <expected>
#include <print>
 
void info(auto name, int x)
{
    std::println("{} : {}", name, x);
}
 
struct Value
{
    int o{};
    ~Value() { info(__func__, o); }
};
 
struct Error
{
    int e{};
    ~Error() { info(__func__, 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};
}

Output:

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