Also, a small technical detail. I believe carefully adding the flag to `error_code` doesn't increase its size. On 64-bit systems it fits nicely in the padding area. On 32-bit systems it could be merged into the category pointer, if we really wanted. Not sure `result<void>` does that.
I've taken great care to ensure Outcomes fit into the ABI stack spill size (32 bytes) where possible. Layout is always: T value; unsigned flags; E error; So if T were an int and E an error_code, size on 64 bit would be 24 bytes (error_code is 16 bytes), but just 16 bytes on 32 bit. result<void> is also 24 bytes, rather than 20 bytes, due to the error_code containing a pointer forcing alignment to the next 8 byte multiple. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/