class P { 
\fbox{P}
public: P() { _self = 0; } virtual P* self() { return _self?_self->self():this; } virtual void attach(C* p) { _self = p; } private: P* _self; }; class C : public P {
\fbox{ C <= P}
public: C() : P(this) { } C* self() {
ANSI/ISO
return _self?_self->self():this; } void attach(P* p) { p->attach(self()); }
rejected
void redirect(C* c) { _self = c; } private: C* _self; };

slide: Subtyping in C++