#include <iostream>
using namespace std;
template<typename T>
struct Base {
int x;
void print() {
cout << "As Derived at " << static_cast<T*>(this) << ", as Base at " << this << ".\n";
}
};
struct Derived: Base<Derived> { virtual ~Derived() {} };
int main()
{
Derived d;
d.print();
cout << "Real Derived at " << &d << ".\n";
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IEJhc2UgeyAKCWludCB4OwoJdm9pZCBwcmludCgpIHsKCQljb3V0IDw8ICJBcyBEZXJpdmVkIGF0ICIgPDwgc3RhdGljX2Nhc3Q8VCo+KHRoaXMpIDw8ICIsIGFzIEJhc2UgYXQgIiA8PCB0aGlzIDw8ICIuXG4iOwoJfQp9OwpzdHJ1Y3QgRGVyaXZlZDogQmFzZTxEZXJpdmVkPiB7IHZpcnR1YWwgfkRlcml2ZWQoKSB7fSB9OwoKaW50IG1haW4oKQp7CiAgICBEZXJpdmVkIGQ7CiAgICBkLnByaW50KCk7Cgljb3V0IDw8ICJSZWFsIERlcml2ZWQgYXQgIiA8PCAmZCA8PCAiLlxuIjsKfQ==