58 : _err(err.error()), _has_result(
false)
61 template<
typename... Args>
62 explicit Result(in_place_t, Args&&... args)
63 noexcept(
noexcept(T(cxx::forward<Args>(args)...)))
64 : _res(
cxx::forward<Args>(args)...), _has_result(true)
68 noexcept(
noexcept(T(cxx::move(val))))
69 : _res(
cxx::move(val)), _has_result(true)
73 noexcept(
noexcept(T(o._res)))
74 : _has_result(o._has_result)
77 new (&_res) T(o._res);
83 noexcept(
noexcept(T(cxx::move(o._res))))
84 : _has_result(o._has_result)
87 new (&_res) T(cxx::move(o._res));
99 noexcept(
noexcept(T(o._res)))
104 _has_result = o._has_result;
106 new (&_res) T(o._res);
118 _res = cxx::move(o._res);
130 new (&_res) T(cxx::move(o._res));
140 Result &operator=(Error err)
noexcept
151 Result &operator=(T &&val)
154 _res = cxx::move(val);
157 new (&_res) T(cxx::move(val));
164 explicit operator bool() const noexcept
165 {
return _has_result; }
167 int error() const noexcept
168 {
return _has_result ? 0 : _err; }
170 T
const &result() const & noexcept
173 if (!_has_result) [[unlikely]]
179 T&& result() &&
noexcept
182 if (!_has_result) [[unlikely]]
185 return cxx::move(_res);