#include <iostream>
struct Base
{
virtual void foo()
{
std::cout << "Base::foo" << std::endl;
}
virtual ~Base()
{
foo();
}
};
struct Derived: Base
{
virtual void foo()
{
std::cout << "Derived::foo" << std::endl;
}
};
int main()
{
Base *p = new Derived();
delete p;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKCnN0cnVjdCBCYXNlCnsKICAgIHZpcnR1YWwgdm9pZCBmb28oKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiQmFzZTo6Zm9vIiA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgICB2aXJ0dWFsIH5CYXNlKCkKICAgIHsKICAgICAgICBmb28oKTsKICAgIH0KfTsKCgpzdHJ1Y3QgRGVyaXZlZDogQmFzZQp7CiAgICB2aXJ0dWFsIHZvaWQgZm9vKCkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkRlcml2ZWQ6OmZvbyIgPDwgc3RkOjplbmRsOwogICAgfQp9OwoKCgppbnQgbWFpbigpCnsKICAgIEJhc2UgKnAgPSBuZXcgRGVyaXZlZCgpOwogICAgZGVsZXRlIHA7Cn0=