1 //===----------------------------------------------------------------------===// 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 #ifndef AB_H 11 #define AB_H 12 13 #include <cassert> 14 15 class A 16 { 17 int id_; 18 public: 19 explicit A(int id) : id_(id) {++count;} 20 A(const A& a) : id_(a.id_) {++count;} 21 virtual ~A() {assert(id_ >= 0); id_ = -1; --count;} 22 23 static int count; 24 }; 25 26 int A::count = 0; 27 28 class B 29 : public A 30 { 31 public: 32 explicit B(int id) : A(id) {++count;} 33 B(const B& a) : A(a) {++count;} 34 virtual ~B() {--count;} 35 36 static int count; 37 }; 38 39 int B::count = 0; 40 41 #endif // AB_H 42