27template<
typename ValueType,
typename ErrorType>
33 : m_impl(std::forward<ValueType>(
value)) {}
38 : m_impl(std::forward<ErrorType>(
error)) {}
50 bool is_value()
const {
return std::holds_alternative<ValueType>(m_impl); }
55 bool is_error()
const {
return std::holds_alternative<ErrorType>(m_impl); }
63 return std::get<ValueType>(m_impl);
72 return std::get<ValueType>(std::move(m_impl));
81 return std::get<ErrorType>(m_impl);
90 return std::get<ErrorType>(std::move(m_impl));
94 std::variant<ValueType, ErrorType> m_impl;
103template<
typename ErrorType>
112 : m_impl(std::forward<ErrorType>(
error)) {}
128 bool is_error()
const {
return m_impl.has_value(); }
152 return std::move(*m_impl);
156 std::optional<ErrorType> m_impl;
167 auto _tmp = (expr); \
168 if (_tmp.is_error()) \
169 return _tmp.release_error(); \
170 _tmp.release_value(); \
181 auto _tmp = (expr); \
182 assert(_tmp.is_value()); \
183 _tmp.release_value(); \
~Result()=default
Destroys a Result object.
bool is_value() const
Definition Result.hpp:124
Result(ErrorType &&error)
Definition Result.hpp:111
ErrorType & error()
Definition Result.hpp:141
void value()
Definition Result.hpp:132
void release_value()
Definition Result.hpp:135
bool is_error() const
Definition Result.hpp:128
Result(Result &&)=default
Moves a Result object.
Result()=default
Construct a Result object without an error.
Result(Result const &)=default
Copies a Result object.
ErrorType && release_error()
Definition Result.hpp:150
Result(ValueType &&value)
Definition Result.hpp:32
bool is_value() const
Definition Result.hpp:50
ValueType & value()
Definition Result.hpp:61
ErrorType && release_error()
Definition Result.hpp:88
Result(Result &&)=default
Moves a Result object.
Result(Result const &)=default
Copies a Result object.
Result(ErrorType &&error)
Definition Result.hpp:37
ValueType && release_value()
Definition Result.hpp:70
~Result()=default
Destroys a Result object.
bool is_error() const
Definition Result.hpp:55
ErrorType & error()
Definition Result.hpp:79