Worked example: Custom domain
Here follows a worked example of use of Experimental Outcome. It presents the same sample program I sent to the San Diego 2018 WG21 standards meeting after I was asked by the committee to demonstrate how P1095 implements P0709 in a working code example they could study and discuss.
We will walk through this worked example, step by step, explaining how each part works in detail. This will help you implement your own code based on Experimental Outcome.
You may find it useful to open now in a separate browser tab the reference API
documentation for proposed
<system_error2> at https://ned14.github.io/status-code/
(scroll half way down). The references in the comments to P1028 are to
P1028 SG14 status_code and standard error object for P0709 Zero-overhead
deterministic exceptions, which is the WG21 proposal
paper for potential
Goal of this section
We are going to define a simple custom code domain which defines that
the status code’s payload will consist of a POSIX error code, and the
__LINE__ where the failure occurred. This custom status
code will have an implicit conversion to type erased
error defined, which dynamically
allocates memory for the original status code, and outputs an
which manages that dynamic allocation, indirecting all queries etc
to the erased custom status code type such that the
quacks as if just like the original. This demonstrates that
just as equally convey a
std::exception_ptr, for example, or indeed
manage the lifetime of any pointer.