// Make sure throw-catch during unwind does not trash internal data. #include exception yin {}; exception yang {}; vtable(yin) yin_vt; vtable(yang) yang_vt; int main(int argc, char * argv[]) { try { try { throw (yin){&yin_vt}; } finally { try { throw (yang){&yang_vt}; } catch (yin *) { sout | "inner yin"; } catch (yang *) { sout | "inner yang"; } } } catch (yin *) { sout | "outer yin"; } catch (yang *) { sout | "outer yang"; } }