A better approach for this that I use in my personal applications is to combine the concept of an error code and a result into a single object that records the 'checked' state.
Attempting to fetch a value from one of these result objects will throw if the result object contains an error, which handles the common case, and the less common case - forgetting to check at all - can explode violently as described here. If you want to simply discard the error code or handle it manually, you can just check the failure status of a result object and go about your merry way. It's a nice compromise and it happens to integrate nicely if you're already using futures/promises to represent work.
The OP there did not pass an extra parameter, but used the return value itself to deliver the exploding return code.
I've used this from time to time as a debugging aid, because it allows me to track down places in my code where I forget error checks. Using the exploding codes in live code is not a good idea however, because they rely on throwing in destructors, which is a bad thing to do.
9 comments
[ 3.3 ms ] story [ 30.2 ms ] threadChecked exceptions don't give you exception safety for free: they give you boilerplate code, and exception safety is still up to the developer.
(I never bought the argument about exceptions obfuscating control flow, either.)
API documentation: http://library.gnome.org/devel/glib/stable/glib-Error-Report....
Of course, glib being C it cannot provide the same level of checking that C++ can do, so it's quite basic, but also quite nice to work with.
https://groups.google.com/group/comp.lang.c++.moderated/brow...
The OP there did not pass an extra parameter, but used the return value itself to deliver the exploding return code.
I've used this from time to time as a debugging aid, because it allows me to track down places in my code where I forget error checks. Using the exploding codes in live code is not a good idea however, because they rely on throwing in destructors, which is a bad thing to do.
"Those who do not know history are doomed to reinvent CORBA_Environment."
(Although there are few new details, such as the aborting if the dtor determines it wasn't checked.)