1)
The concept of writing exception safe/neutral code is based on thatyou can rely on the destructor managing its task, that is, with a situation is infact thrown just put all your trust in destructors.
2)
Another way of thinking about it is "destruction must always succeed". Conceptually, if an exception is thrown from a destructor that would mean that the destruction did infact fail.
If we don't code by "destruction must always succeed" we can get into quite hairy situations, like where you must delete stuff when quitting, but since the deletion fails you can't quit.
Exceptions are (preferably) used in such a way that for example a user can make corrective actions and perhaps try again. But with a failed destructor, what on earth is a poor user supposed to do (perhaps something like setting a member's value so it can be immediately destroyed - wouldn't that be really silly?)...
>Is the rule then that two valid exceptions results in an automatic terminate ?
Its a rule that 2 simultaneous exceptions will make your application die quite ungracefully.
/Per
if (typos) cout << "My fingers are faster than my brain. Sorry for the typos.";