class X {
  public:
      X();
      virtual ~X();
    virtual void f() = 0;
    void f2();
};

class Y : public X {
  public:
      Y();
      virtual ~Y();
    virtual void f();
};

#include <stdio.h>

int main() {
    Y * y = new Y();
    y->f2();
    delete y;
}

X::X() { printf("In X::X\n"); }
X::~X() { printf("In X::~X; calling f2\n"); f2(); }

Y::Y() { printf("In Y::Y\n"); }
Y::~Y() { printf("In Y::~Y\n"); }

void Y::f() { printf("In Y::f\n"); }
void X::f2() { printf("In X::f2; calling f\n"); f(); }

