On Wed, Jun 15, 2011 at 1:08 AM, Michael Schuerig
Is this a correct paraphrase: op<< either adds additional info to an exception or it raises another exception indicating its failure.
Yes. That way, if you get the original exception, it is guaranteed to have the information needed to handle it; and in case op<< throws, you'll get another (presumably more severe) exception.
Let's see. When I catch one exception and while I add information to it, a new exception is thrown, it is this new exception that will propagate up the call stack. By contrast, when a destructor is called due to an exception and the code in the destructor does something that throws another exception, this causes program termination. -- Is that it?
I was assuming that program termination would be unacceptable, so the destructor would have to catch and eat exceptions that op<< emits, and this means that the catch site could be getting exceptions that are missing random information, up to possibly not having any. So, it has to be able to deal with any exception knowing *only* it's type. Like I said, I'm not against this functionality being available, but it isn't going to be trivial to implement. Essentially, when an exception is created, a pointer allocated in thread-local storage needs to be initialized to point to it so that destructors can access it. However, you can have multiple active exceptions, so what is really needed is a stack of pointers, allocated in thread-local storage. And it has to be portable. :) Emil Dotchevski Reverge Studios, Inc. http://www.revergestudios.com/reblog/index.php?n=ReCode