30#define ENABLE_IF(...) typename std::enable_if<__VA_ARGS__>::type* = nullptr
32template <
typename T,
typename E>
39 template <
typename CopyT = T, ENABLE_IF(!std::is_
void<CopyT>::value)>
43 template <
class...
Args,
44 ENABLE_IF(std::is_constructible<T, Args&&...>::value)>
51 template <
class OtherE = E,
52 ENABLE_IF(std::is_constructible<E, const OtherE&>::value)>
61 return std::move(std::get<T>(
mVariant));
68 template <
typename T2 = T, ENABLE_IF(!std::is_
void<T>::value)>
69 constexpr const T&
value() const& {
72 template <
typename T2 = T, ENABLE_IF(!std::is_
void<T>::value)>
77 constexpr const T&&
value() const&& {
78 return std::move(std::get<T>(
mVariant));
84 constexpr const E&&
error() const&& {
85 return std::move(std::get<E>(
mVariant));
90 typename NewE = std::remove_cv_t<std::invoke_result_t<F, E>>>
93 if constexpr (std::is_void_v<T>) {
112 template <
typename T>
115 template <
class...
Args,
116 ENABLE_IF(std::is_constructible<E, Args&&...>::value)>
122 constexpr const E&&
value() const&& noexcept {
return std::move(
mError); }
129#define GFXSTREAM_EXPECT(x) \
131 auto local_expected = (x); \
132 if (!local_expected.ok()) { \
133 return gfxstream::unexpected(local_expected.error()); \
135 std::move(local_expected.value()); \
Definition: expected.h:138
Definition: expected.h:33
constexpr T * operator->()
Definition: expected.h:57
constexpr T && operator*() &&
Definition: expected.h:63
constexpr const T && operator*() const &&
Definition: expected.h:60
std::variant< T, E > mVariant
Definition: expected.h:104
constexpr bool has_value() const
Definition: expected.h:65
constexpr const T & value() const &
Definition: expected.h:69
constexpr expected()=default
constexpr expected(const expected &rhs)=default
constexpr E && error() &&
Definition: expected.h:87
constexpr T & operator*() &
Definition: expected.h:59
constexpr const T & operator*() const &
Definition: expected.h:58
constexpr expected< T, NewE > transform_error(F &&function)
Definition: expected.h:91
constexpr expected(expected &&rhs)=default
constexpr expected(std::in_place_t, Args &&... args)
Definition: expected.h:45
constexpr T & value() &
Definition: expected.h:73
constexpr const T * operator->() const
Definition: expected.h:56
constexpr const T && value() const &&
Definition: expected.h:77
constexpr expected(const unexpected< E > &u)
Definition: expected.h:48
constexpr expected(T &&v)
Definition: expected.h:40
constexpr T && value() &&
Definition: expected.h:80
constexpr E & error() &
Definition: expected.h:83
constexpr expected(const unexpected< OtherE > &e)
Definition: expected.h:53
constexpr const E && error() const &&
Definition: expected.h:84
constexpr bool ok() const
Definition: expected.h:66
constexpr const E & error() const &
Definition: expected.h:82
Definition: expected.h:108
constexpr E && value() &&noexcept
Definition: expected.h:123
constexpr const E && value() const &&noexcept
Definition: expected.h:122
constexpr unexpected(std::in_place_t, Args &&... args)
Definition: expected.h:117
constexpr E & value() &noexcept
Definition: expected.h:121
E mError
Definition: expected.h:126
constexpr const E & value() const &noexcept
Definition: expected.h:120
constexpr unexpected(const unexpected &)=default
constexpr unexpected(T &&e)
Definition: expected.h:113
#define ENABLE_IF(...)
Definition: expected.h:30
unexpected(E) -> unexpected< E >
std::vector< std::string_view > Args
Definition: incremental.h:28
Definition: logging.h:464