File indexing completed on 2025-12-15 09:59:13
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #ifndef BOOST_OUTCOME_BASIC_OUTCOME_EXCEPTION_OBSERVERS_HPP
0032 #define BOOST_OUTCOME_BASIC_OUTCOME_EXCEPTION_OBSERVERS_HPP
0033
0034 #include "basic_result_storage.hpp"
0035
0036 BOOST_OUTCOME_V2_NAMESPACE_EXPORT_BEGIN
0037
0038 namespace detail
0039 {
0040 template <class Base, class R, class S, class P, class NoValuePolicy> class basic_outcome_exception_observers : public Base
0041 {
0042 public:
0043 using exception_type = P;
0044 using Base::Base;
0045
0046 constexpr inline exception_type &assume_exception() & noexcept;
0047 constexpr inline const exception_type &assume_exception() const & noexcept;
0048 constexpr inline exception_type &&assume_exception() && noexcept;
0049 constexpr inline const exception_type &&assume_exception() const && noexcept;
0050
0051 constexpr inline exception_type &exception() &;
0052 constexpr inline const exception_type &exception() const &;
0053 constexpr inline exception_type &&exception() &&;
0054 constexpr inline const exception_type &&exception() const &&;
0055 };
0056
0057
0058 template <class Base, class R, class S, class NoValuePolicy> class basic_outcome_exception_observers<Base, R, S, void, NoValuePolicy> : public Base
0059 {
0060 public:
0061 using Base::Base;
0062
0063 constexpr void assume_exception() & noexcept { NoValuePolicy::narrow_exception_check(*this); }
0064 constexpr void assume_exception() const & noexcept { NoValuePolicy::narrow_exception_check(*this); }
0065 constexpr void assume_exception() && noexcept { NoValuePolicy::narrow_exception_check(std::move(*this)); }
0066 constexpr void assume_exception() const && noexcept { NoValuePolicy::narrow_exception_check(std::move(*this)); }
0067
0068 constexpr void exception() & { NoValuePolicy::wide_exception_check(*this); }
0069 constexpr void exception() const & { NoValuePolicy::wide_exception_check(*this); }
0070 constexpr void exception() && { NoValuePolicy::wide_exception_check(std::move(*this)); }
0071 constexpr void exception() const && { NoValuePolicy::wide_exception_check(std::move(*this)); }
0072 };
0073
0074 }
0075
0076 BOOST_OUTCOME_V2_NAMESPACE_END
0077
0078 #endif