#include <iostream>
template <class Derived>
class Base {
public:
Base(Derived& d) : derived(d) {}
void f() { std::cout << "Base\n"; }
virtual ~Base() { derived.f(); }
private:
Derived& derived;
};
class Derived : public Base<Derived> {
public:
Derived() : Base<Derived>(*this) {}
virtual void f() { std::cout << "Derived\n"; }
};
int main() {
Derived d;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGUgPGNsYXNzIERlcml2ZWQ+CmNsYXNzIEJhc2UgewpwdWJsaWM6CiAgICBCYXNlKERlcml2ZWQmIGQpIDogZGVyaXZlZChkKSB7fQogICAgdm9pZCBmKCkgeyBzdGQ6OmNvdXQgPDwgIkJhc2VcbiI7IH0KICAgIHZpcnR1YWwgfkJhc2UoKSB7IGRlcml2ZWQuZigpOyB9CnByaXZhdGU6CiAgICBEZXJpdmVkJiBkZXJpdmVkOwp9OwoKY2xhc3MgRGVyaXZlZCA6IHB1YmxpYyBCYXNlPERlcml2ZWQ+IHsKcHVibGljOgogICAgRGVyaXZlZCgpIDogQmFzZTxEZXJpdmVkPigqdGhpcykge30KICAgIHZpcnR1YWwgdm9pZCBmKCkgeyBzdGQ6OmNvdXQgPDwgIkRlcml2ZWRcbiI7IH0KfTsKCmludCBtYWluKCkgewogICAgRGVyaXZlZCBkOwp9Cg==