Here is a smaller test case: Jim
#include <iostream> class base { }; class clone : public base { protected: base *cloned; public: clone(base *_cloned) : cloned(_cloned) { } }; class derive : public base { }; class cloner : public clone { derive *&foo; public: cloner() : clone(0), foo(static_cast<derive*>(cloned)) { printf("%p:%p\n", &cloned, &foo); } }; int main(int argc, char *argv[]) { cloner bar; return 0; }