Emil Dotchevski wrote:
On Sun, May 24, 2009 at 10:09 PM, Andrew Venikov
wrote: Emil Dotchevski wrote:
<...>
That's my point, you want some exceptions emitted by the throw expression to be ignored, and some not. <..> I would rather say that the main exception should be thrown no matter what.
If you write:
throw foo() << info1(bar());
and bar() throws something (note, this function might have nothing to do with Boost Exception or foo), do you want that exception silently ignored? By the same token I could ask: do you want foo() silently ignored?
When I write this:
throw WidgetAllocError();
It's pretty obvious what I want. Of course, it would be nice to have more informative description, that's why I would normally add:
throw WidgetAllocError() << WidgetErrorDescription(strWidgetName);
But this now changes the original intent. By the time we reach the throw statement, we've made a decision that an error condition has been reached and we want to indicate that error. If we continue propagating WidgetAllocError(), then we'll at least know what kind of error happened, albeit without extra information.
That "albeit" is very important. It effectively requires the catch site to be able to deal with a WidgetAllocError that has no additional information in it. Are you sure you want to impose this requirement on all programs wrt all exceptions?
Agreed. But if I understand correctly, even now the good style to catch error_info is first to call get_error_info(), and then check the pointer for null. "Imposing this requirement" here simply means doing that check for pointer not being equal to null. Or am I missing something? Are you saying there is a way where we can assume that the returned pointer will never be null? It looks like we really have to decide, what's more important - preserving the original exception or preserving a newer exception. I'm trying to understand whether this dilemma simply presents a matter of taste, or is there a real (if a little academical) problem to solve. If I'm convinced that it's just a matter of taste - then I'm fine with either way. But so far I feel that importance of receiving the original exception outweighs the possible loss of other exceptions (which by the way wouldn't be thrown in a first place if it wasn't for the original exception) Maybe others can chime in. Thanks, Andy.