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;
}