1 //===----------------------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef AB_H 10 #define AB_H 11 12 #include <cassert> 13 14 class A 15 { 16 int id_; 17 public: A(int id)18 explicit A(int id) : id_(id) {++count;} A(const A & a)19 A(const A& a) : id_(a.id_) {++count;} ~A()20 virtual ~A() {assert(id_ >= 0); id_ = -1; --count;} 21 22 A& operator=(const A& other) { id_ = other.id_; return *this; } 23 24 static int count; 25 }; 26 27 int A::count = 0; 28 29 class B 30 : public A 31 { 32 public: B(int id)33 explicit B(int id) : A(id) {++count;} B(const B & a)34 B(const B& a) : A(a) {++count;} ~B()35 virtual ~B() {--count;} 36 37 static int count; 38 }; 39 40 int B::count = 0; 41 42 #endif // AB_H 43