From now on, I shall refer to abcd as A and to abcde as B.
An A is constructed after a B. A::A() throws. In the process of handling this exception, the program must destruct both objects. During the process of destructing the B object, another exception is thrown. An exception that is thrown while another exception is being handled (i.e. after the throw statement has been executed but before the catch block is entered) causes the program to abort.