The payload
We define the code domain’s value_type
– the payload to be transported by
status codes using this code domain – to be a POSIX errno
value, an integer
line number and a const char pointer.
public:
// This is the value type for `file_io_error`. We add line number and source file path.
struct value_type
{
typename outcome_e::posix_code::value_type errcode; // from POSIX, as we inherit from _posix_code_domain
// Our additional payload
int lineno; // from __LINE__
const char *file; // from __FILE__
// Could also place a backtrace of void *[16] here ...
};
You will note that this is a TriviallyCopyable
type, and so gains an implicit
conversion to any status_code<erased<T>>
where sizeof(T) >= sizeof(value_type)
.
error
is however status_code<erased<intptr_t>>
, and sizeof(intptr_t) < sizeof(value_type)
,
so it is not possible to implicitly convert status codes from this domain into
error
. Instead, you must tell the compiler how to do the conversion, as we
shall see later.