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.



