// Copyright (C) 2000 Free Software Foundation, Inc. // Contributed by Nathan Sidwell 8 Mar 2000 // Derived from PR#7 // We need to destroy the thrown object when exiting the catch // clause. That needs to destroy the original thrown object, not // the caught one (which might be a base). static int ok = 0; struct A { A (){}; virtual ~A () {}; }; struct B : virtual A { int value; B () :value(10) {} ~B() { if (value == 10) ok = 1; } }; int main() { try { throw B (); } catch (A & e) { } return !ok; }