= true, }; template <mutability, // mutability specification class = std::monostate, // success type class = std::monostate, // failure type class = decltype(nullptr) // for detection idiom > class basic_result;
for immutable result template <class T = std::monostate, class E = std::monostate> using result = basic_result<mutability::immut, T, E>; /// alias template for mutable result template <class T = std::monostate, class E = std::monostate> using mut_result = basic_result<mutability::mut, T, E>;
res.expect("foo"); // panicked at 'foo: failure(42)' result<int, int> res(failure{42}); auto ok = res.unwrap(); // panicked at 'called `result::unwrap()` on a value: failure(42)'
res.expect_err("foo"); // panicked at 'foo: success(42)' result<int, int> res(success{42}); auto err = res.unwrap_err(); // panicked at 'called `result::unwrap_err()` on a value: success(42)'