Define a custom code domain
Firstly let’s alias the experimental Outcome namespace into something less tedious to type, declare our custom status code type, and get started on defining the custom status code domain implementation.
namespace outcome_e = BOOST_OUTCOME_V2_NAMESPACE::experimental;
// To define a `file_io_error` which participates in the P1028 world
// of `std::error`, we must first declare, then define, a custom code
// domain which extends `posix_code` (the std error coding for POSIX
// failures). The following is fairly standard boilerplate for defining
// a custom code domain. It is analogous to defining a custom `std::error_category`.
class _file_io_error_domain;
// We define `file_io_error` to be the status code whose domain is `_file_io_error_domain`.
using file_io_error = outcome_e::status_code<_file_io_error_domain>;
// Now we define `_file_io_error_domain`.
class _file_io_error_domain : public outcome_e::posix_code::domain_type
{
using _base = typename outcome_e::posix_code::domain_type;
Note that we inherit from outcome_e::posix_code::domain_type
, not
from outcome_e::status_code_domain
. We thus reuse most of the
implementation of outcome_e::posix_code::domain_type
rather than
implementing required functionality. If you would like to see a
fuller treatment of defining a custom status code domain from
scratch, see this worked example here.