I'm not a guru, but I have used exceptions quite a bit in restricted circumstances...
Before I go on, this post might be of interest to you, if you haven't already seen it:
http://stackoverflow.com/questions/242587/exception-handling-architecture
Or rather, the disagreeing posts it links to (by Joel and Ned Batchelder). It's the debate which makes the posts interesting, esp. given Joel's reputation.
I think that designing and implementing a good, overarching exception architecture is difficult. And it only works if applied consistently. But there are places where it makes good sense to use them.
Taking as read what jsmith and the C++ Coding Standard book say (you said you know that side of exception handling...)
Exceptions should be caught and handled as early as it possible to handle them gracefully. If you cannot handle them, you should leave them to be handled at another level.
In some cases you might catch an exception and only then realise you can't handle it. In this case you should rethrow it. I also used catch-rethrow in debug builds from time to time, using additional macro-ed handlers, to trace the path of an exception (they just catch, log, rethrow).
It also follows that you should only catch specific types, as you are only catching the ones you can handle. The exact details does, however, depend on the exception hierarchy.
To minimise the number of handlers I require, I don't code a new type of exception for every specific error. I code one for every category of error (see below for an example).
Places where I use exception handling are:
1. When normal error handling would get very messy.
For example, in an expression evaluator. The code is complicated enough without error checks, so throwing out of the code at all levels makes sense. In this case I would
(a) wrap the whole evaluation in a single try-catch block, and (b) prob. use a single type of exception -- expr_eval_error -- which takes an error code and enough other info to identify what was going wrong with the evaluation when it was thrown.
If other exceptions could occur, like out of memory, then I would catch then as well. But only if I could so somethine about it.
In other similar circumstances, where the code complexity is high enough to merit it, I might throw and catch exceptions at different levels. This is usually heavily algorithmic code.
2. To wrap calls to 3rd party code: this is one of the two places I would use catch-all.
3. The other place for catch-all is to protect the application's main function/message loop.
If an unknown exception type is caught, the application should gracefully shutdown, after saving the user's data, as its state will no longer be known. So there is no need for catch-all at any other level. The only reason to catch the third parties errors, rather than letting them propogate to the top most handler, is an extra error logging opportunity (to apportion blame!)
The use of catch all can be esp evil if used in the wrong place, as it can hide errors. It can be useful to add this kind of exception handling (temporarily and at tight scope) for diagnostic puprose, but I would never check it into the source control system!
I do not generally use exception handling in code which is not speed ciritical. This includes the message handlers in WIN32 message loops and other equivalent functions.
I also don't use exception handling in code where I am using a lot of (e.g. WIN32) API calls which force me to use error codes. A mish-mash of approaches just confuses things! (Well, it does me!!)
It is also a bad idea to throw exceptions between DLLs (and I presume shared-objects).
As the top level objects (in the object model) are the ones communicating between modules, I tend to use return codes for their error reporting. Exception handling is restricted to their subcomponents and to smaller utilities. And this is what STL is using anyway.
As I said at the start, if a good exception architecture exists, and everyone uses it consistently, then it can be very good, In parctice I stick to the kind of limited use I mentioned above.
If you are interested in reading detailed discussions, I suggest you google for "exception handling patterns" and also "exception handling anti-patterns".
Andy
P.S. The post you referred to isn't that old. Exception handling techniques aren't evolving esp. fast!