#include <iostream>
#include <string>
using namespace std;
void doit(class Base*);
class Base {
public:
virtual void foo() = 0;
~Base() { doit(this); }
};
void doit(Base *p) { p->foo(); }
class Derived : public Base {
string s;
public:
Derived(string s) : s(s) {}
virtual void foo() { cout << "hello " << s << "\n"; }
};
int main ()
{
Derived d("Derived");
}