#include static unsigned NumAs = 0; struct A { unsigned ANum; A() : ANum(NumAs++) { printf("Created A #%d\n", ANum); } A(const A &a) : ANum(NumAs++) { printf("Copy Created A #%d\n", ANum); } ~A() { printf("Destroyed A #%d\n", ANum); } }; static bool ShouldThrow = false; int throws() try { if (ShouldThrow) throw 7; return 123; } catch (...) { printf("'throws' threw an exception: rethrowing!\n"); throw; } struct B { A a0, a1, a2; int i; A a3, a4; B(); ~B() { printf("B destructor!\n"); } }; B::B() try : i(throws()) { printf("In B constructor!\n"); } catch (int i) { printf("In B catch block with int %d: auto rethrowing\n", i); } int main() { { B b; // Shouldn't throw. } try { ShouldThrow = true; B b; } catch (...) { printf("Caught exception!\n"); } }