Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
Prev Up HomeNext

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 ...
  };
View this code on Github

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.

Last revised: January 26, 2019 at 23:38:56 UTC


Prev Up HomeNext