62template<
typename T,
typename E = ResultError>
class expected;
78template<
typename T,
typename E>
89 auto* err =
mData.template ptr<ErrorInfo<E>>();
90 return err ? err->code : E{};
95 auto* err =
mData.template ptr<ErrorInfo<E>>();
96 return err ? err->message.c_str() :
"";
153 auto* err =
mData.template ptr<ErrorInfo<E>>();
154 return err ? err->code : E{};
158 auto* err =
mData.template ptr<ErrorInfo<E>>();
159 return err ? err->message.c_str() :
"";
190 auto* err = other.mData.template ptr<ErrorInfo<E>>();
199 if (
this != &other) {
203 auto* err = other.mData.template ptr<ErrorInfo<E>>();
~expected() FL_NOEXCEPT=default
Destructor (defaulted - variant handles cleanup)
static expected success() FL_NOEXCEPT
bool ok() const FL_NOEXCEPT
static expected failure(E err, const char *msg=nullptr) FL_NOEXCEPT
expected & operator=(const expected &other) FL_NOEXCEPT
Copy assignment.
fl::variant< VoidSuccess, ErrorInfo< E > > mData
expected & operator=(expected &&other) FL_NOEXCEPT=default
Move assignment (defaulted - variant handles it)
const char * message() const FL_NOEXCEPT
expected() FL_NOEXCEPT
Default constructor (creates error state)
expected(expected &&other) FL_NOEXCEPT=default
Move constructor (defaulted - variant handles it)
E error() const FL_NOEXCEPT
expected(const expected &other) FL_NOEXCEPT
Copy constructor (needed for some use cases like Impl initialization)
~expected() FL_NOEXCEPT=default
Destructor (defaulted - variant handles cleanup)
expected(expected &&other) FL_NOEXCEPT=default
Move constructor (defaulted - variant handles it)
E error() const FL_NOEXCEPT
Get error code (only meaningful if !ok())
expected() FL_NOEXCEPT
Default constructor (creates error state)
T & value() FL_NOEXCEPT
Get value (only valid if ok() == true)
expected & operator=(expected &&other) FL_NOEXCEPT=default
Move assignment (defaulted - variant handles it)
static expected failure(E err, const char *msg=nullptr) FL_NOEXCEPT
Create error result.
bool ok() const FL_NOEXCEPT
Check if operation succeeded.
fl::variant< T, ErrorInfo< E > > mData
const T & value() const FL_NOEXCEPT
bool has_value() const FL_NOEXCEPT
Check if operation succeeded (alias for ok())
static expected success(T value) FL_NOEXCEPT
Create successful result.
const char * message() const FL_NOEXCEPT
Get error message (only meaningful if !ok())
constexpr remove_reference< T >::type && move(T &&t) FL_NOEXCEPT
ResultError
Generic error codes for expected type.
@ NOT_INITIALIZED
Object not initialized.
@ ALREADY_INITIALIZED
Object already initialized.
@ IO_ERROR
Input/output error.
@ NOT_SUPPORTED
Operation not supported.
@ UNKNOWN
Unknown or unspecified error.
@ OUT_OF_RANGE
Value out of valid range.
@ ALLOCATION_FAILED
Memory allocation failed.
@ TIMEOUT
Operation timed out.
@ OK
No error (not typically used)
@ INVALID_ARGUMENT
Invalid input arguments.
pair_element< I, T1, T2 >::type & get(pair< T1, T2 > &p) FL_NOEXCEPT
Base definition for an LED controller.
Dummy type for void expected success state.
ErrorInfo(E err, const char *msg=nullptr) FL_NOEXCEPT
Error information for expected type.