#include <iostream>
using namespace std;
class B
{
public:
  virtual void Test() {cout <<"B::Test"<<endl;}; // = 0; makes pure function call crash
  void InDirect()
  {
  	Test();
  }
  B(){ /*InDirect();*/ }
  virtual ~B(){cout<<"~B"<<endl; InDirect();}
};
class BB : public B
{
public:
  //void Test() override
  //{ cout <<"BB::Test"<<endl; }
  ~BB(){cout<<"~BB"<<endl; InDirect();}
  
};
class BBB : public BB
{
public:
  void Test() override
  { cout <<"BBB::Test"<<endl; }
  ~BBB(){cout<<"~BBB"<<endl;}
};
int main() {
	B* ptr = new BBB;
	delete ptr;
	return 0;
}