On 01/12/18 21:46, Peter Dimov via Boost wrote:
Andrey Semashev wrote:
It will only be broken if you rely on `error_code( 0, some-category )` > to contextually-convert to `false`.
I'm not sure how I can *not* rely on that since I construct `error_code` from enums or ints, all of them having 0 as the "success" value precisely to allow the contextual conversion produce the intended result.
That's exactly what Niall wanted to know, I suppose; would it be possible for you to give specific examples from your code that would be broken?
I suppose, code like this: enum class my_errors { success = 0 }; void foo(error_code& err) { // Do stuff... err = make_error_code(success); // error_code(0, my_category) } void bar() { error_code err; foo(err); if (err) complain(); } I suppose, you could argue that I could avoid `err` initialization in `foo`, but that is a matter of taste and whether you want to rely on the initial state of `err` on entry into `foo`. I'm also not happy to have to convert that initialization to err = error_code(); because it loses information about the error category, which may be useful if I want to print `err` to log even if it is a success.