class A;
class B;
template<typename T>
struct Ptr { T* ptr_t; };
class A {
public:
using ptr = Ptr<A>;
Ptr<B> b;
};
class B {
public:
using ptr = Ptr<B>;
Ptr<A> a;
};
int main() {
A a;
B b;
a.b.ptr_t = &b;
b.a.ptr_t = &a;
A::ptr aptr;
B::ptr bptr;
aptr.ptr_t = &a;
bptr.ptr_t = &b;
a.b = bptr;
b.a = aptr;
}
CWNsYXNzIEE7CgljbGFzcyBCOwoJCgl0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoJc3RydWN0IFB0ciB7IFQqIHB0cl90OyB9OwoJCgljbGFzcyBBIHsKCXB1YmxpYzoKCQl1c2luZyBwdHIgPSBQdHI8QT47CgkJUHRyPEI+IGI7Cgl9OwoJCgljbGFzcyBCIHsKCXB1YmxpYzoKCQl1c2luZyBwdHIgPSBQdHI8Qj47CgkJUHRyPEE+IGE7Cgl9OwoJCglpbnQgbWFpbigpIHsKCQlBIGE7CgkJQiBiOwoJCWEuYi5wdHJfdCA9ICZiOwoJCWIuYS5wdHJfdCA9ICZhOwoKCQlBOjpwdHIgYXB0cjsKCQlCOjpwdHIgYnB0cjsKCQlhcHRyLnB0cl90ID0gJmE7CgkJYnB0ci5wdHJfdCA9ICZiOwoJCWEuYiA9IGJwdHI7CgkJYi5hID0gYXB0cjsKCX0=