Class Acts::Result¶
-
template<typename T, typename E = std::error_code>
class Acts::Result¶ Class which encapsulates either a valid result, or an error.
- tparam T
The valid result value
- tparam E
The error, defaults to
std::error_code
Public Functions
-
Result() = delete¶
Default construction is disallowed.
-
template<typename T2, typename _E = E, typename _T = T, typename = std::enable_if_t<(!std::is_same_v<_T, _E> && !std::is_constructible_v<_T, _E> && !std::is_convertible_v<_T, _E> && !std::is_constructible_v<_E, _T> && !std::is_convertible_v<_E, _T> && !(std::is_convertible_v<T2, _T> && std::is_convertible_v<T2, _E>))>>
inline Result(T2 value) noexcept¶ Constructor from arbitrary value This constructor allows construction from any value.
This constructor is only enabled if T and E are unambiguous, meaning the cannot be implicitly converted and there is T cannot be constructed from E and vice-versa. This means that when this is invoked, the value can be propagated to the underlying variant, and the assignment will be correct, and error will be an error, and a value will be a value.
Note
If T and E are ambigious, use the
success
andfailure
static factory methods.- Template Parameters
T2 – Type of the potential assignment
- Parameters
value – The potential value, could be an actual valid value or an error.
-
inline E &error() & noexcept¶
Returns a reference to the error stored in the result.
Note
If
res.ok()
this method will abort (noexcept)- Returns
Reference to the error
-
inline E error() && noexcept¶
Returns the error by-value.
Note
If
res.ok()
this method will abort (noexcept)- Returns
The error
-
inline bool ok() const noexcept¶
Checks whether this result contains a valid value, and no error.
- Returns
bool Whether result contains an error or not.
-
inline T &operator*() noexcept¶
Returns a reference into the variant to the valid value.
Note
If
!res.ok()
, this method will abort (noexcept)- Returns
Reference to value stored in the variant.
-
inline Result<T, E> &operator=(Result<T, E> &&other)¶
Move assignment is allowed.
- Parameters
other – The other result instance, rvalue reference
- Returns
The assigned instance
-
template<typename T2, typename _E = E, typename _T = T, typename = std::enable_if_t<(!std::is_same_v<_T, _E> && !std::is_constructible_v<_T, _E> && !std::is_convertible_v<_T, _E> && !std::is_constructible_v<_E, _T> && !std::is_convertible_v<_E, _T> && !(std::is_convertible_v<T2, _T> && std::is_convertible_v<T2, _E>))>>
inline Result<T, E> &operator=(T2 value) noexcept¶ Assignment operator from arbitrary value This operator allows construction from any value.
The same rules as for the
Result(T2 value)
constructor apply.- Template Parameters
T2 – Type of the potential assignment
- Parameters
value – The potential value, could be an actual valid value or an error.
- Returns
The assigned instance