#include<iostream>
using namespace std;



template<typename T> class Countable {
protected:
static size_t _counter;
public:
Countable() {++_counter;};
Countable(const Countable &) {++_counter;};

virtual ~Countable() {--_counter;};
static size_t counter()  {return _counter;} 
};

template<typename T> size_t Countable<T>::_counter = 0;

struct MyClass1 : public Countable<MyClass1> {
};

struct MyClass2 : public Countable<MyClass2> {
};

main() {

  MyClass1 o1;
  MyClass1 o2;
  MyClass1 o3;

  MyClass2 r1;

  cerr<<MyClass1::counter()<<endl;
  cerr<<r1.counter()<<endl;

  o2.~MyClass1();
  cerr<<MyClass1::counter()<<endl;
  cerr<<r1.counter()<<endl;

}
