|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
constexpr ~expected(); | (since C++23) | |
Destroys the contained value:
has_value() istrue, destroys the expected value.This destructor is trivial ifstd::is_trivially_destructible_v<T> andstd::is_trivially_destructible_v<E> are bothtrue.
Ifhas_value() isfalse, destroys the unexpected value.
This destructor is trivial ifstd::is_trivially_destructible_v<E> istrue.
#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