1 //===---------------------- catch_class_01.cpp ----------------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is dual licensed under the MIT and the University of Illinois Open 6 // Source Licenses. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include <exception> 11 #include <stdlib.h> 12 #include <assert.h> 13 14 struct A 15 { 16 static int count; 17 int id_; AA18 explicit A(int id) : id_(id) {count++;} AA19 A(const A& a) : id_(a.id_) {count++;} ~AA20 ~A() {count--;} 21 }; 22 23 int A::count = 0; 24 f1()25void f1() 26 { 27 throw A(3); 28 } 29 f2()30void f2() 31 { 32 try 33 { 34 assert(A::count == 0); 35 f1(); 36 } 37 catch (A a) 38 { 39 assert(A::count != 0); 40 assert(a.id_ == 3); 41 throw; 42 } 43 } 44 main()45int main() 46 { 47 try 48 { 49 f2(); 50 assert(false); 51 } 52 catch (const A& a) 53 { 54 assert(A::count != 0); 55 assert(a.id_ == 3); 56 } 57 assert(A::count == 0); 58 } 59