class A; class B { public: int x; A* y; }; class A { public: int x; B* m; }; int f(long int x) //this is in shared lib { A* y = (A*) x; B* z = y->m; return 0; } int main() { A a; a.m = new B(); f((long int) &a); return 0; }