The only remaining objection now is that result<...> is named the same yet has different semantics depending on its S type. Yet error_code is also a status, it's just a *negative* status rather than a *positive* status.
If you are determined to go this way, why not offer two separate templates: `annotated` and `result`. The former for the "status" functionality, the latter for the Outcome-v1-like "either T or error", and have them just share the same implementation. Since they have different semantics and member functions why have them share the same name?
So good news for you, yesterday after pondering things over the weekend I disabled the positive status functionality. It can be reenabled via macro, but it's off by default. result<T, E> v2 is now a strict subset of the Outcome v1 result<T>, except you can choose your own E. I'm not far from finishing outcome<R, S, P>, maybe tomorrow. I'll then be replacing the v1 implementation with the v2, and get to work on getting the existing unit test suite to compile and pass. After that Outcome v2 will undergo at least three months of being tested in real world usage before I consider it ready for review again. During this time I'll deliver that AFIO v2 based NuDB alternative I promised Vinnie, it'll be an excellent test of the v2 Outcome. Niall -- ned Productions Limited Consulting http://www.nedproductions.biz/ http://ie.linkedin.com/in/nialldouglas/