20#ifndef RIPPLE_BASICS_EXPECTED_H_INCLUDED
21#define RIPPLE_BASICS_EXPECTED_H_INCLUDED
23#include <xrpl/basics/contract.h>
25#include <boost/outcome.hpp>
56 Throw<bad_expected_access>();
64 Throw<bad_expected_access>();
72 Throw<bad_expected_access>();
111 return std::move(
val_);
117 return std::move(
val_);
125template <
typename E, std::
size_t N>
129template <
class T,
class E>
131 :
private boost::outcome_v2::result<T, E, detail::throw_policy>
133 using Base = boost::outcome_v2::result<T, E, detail::throw_policy>;
136 template <
typename U>
143 template <
typename U>
146 :
Base(boost::outcome_v2::in_place_type_t<E>{}, std::move(e.
value()))
153 return Base::has_value();
159 return Base::value();
165 return Base::value();
171 return Base::error();
177 return Base::error();
181 operator bool()
const
189 [[nodiscard]]
constexpr T&
192 return this->value();
195 [[nodiscard]]
constexpr T
const&
198 return this->value();
201 [[nodiscard]]
constexpr T*
204 return &this->value();
207 [[nodiscard]]
constexpr T
const*
210 return &this->value();
218 :
private boost::outcome_v2::result<void, E, detail::throw_policy>
220 using Base = boost::outcome_v2::result<void, E, detail::throw_policy>;
229 template <
typename U>
238 return Base::error();
244 return Base::error();
248 operator bool()
const
250 return Base::has_value();
constexpr E const & error() const
constexpr Expected(Unexpected< U > e)
boost::outcome_v2::result< void, E, detail::throw_policy > Base
constexpr T const * operator->() const
constexpr T const & value() const
constexpr bool has_value() const
constexpr T const & operator*() const
constexpr E const & error() const
constexpr Expected(Unexpected< U > e)
boost::outcome_v2::result< T, E, detail::throw_policy > Base
constexpr T & operator*()
constexpr Expected(U &&r)
constexpr T * operator->()
constexpr E && value() &&
constexpr Unexpected(E const &e)
constexpr E const && value() const &&
constexpr E const & value() const &
constexpr Unexpected(E &&e)
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.
Expected is an approximation of std::expected (hoped for in C++23)
static constexpr void wide_exception_check(Impl &&self)
static constexpr void wide_value_check(Impl &&self)
static constexpr void wide_error_check(Impl &&self)