#include <iostream>
#include <utility>
struct A;
struct B
{
A& ref;
int n;
void show() const;
};
struct A
{
B& ref;
int n;
void show() const;
};
void A::show() const
{
std::cout << "A.n is " << n
<< " A.ref.n is " << ref.n
<< " A.ref.ref.n is " << ref.ref.n
<< " A.ref.ref.ref.n is " << ref.ref.ref.n
<< '\n';
}
void B::show() const
{
std::cout << "B.n is " << n
<< " B.ref.n is " << ref.n
<< " B.ref.ref.n is " << ref.ref.n
<< " B.ref.ref.ref.n is " << ref.ref.ref.n
<< '\n';
}
int main()
{
struct {A first; B second;} pair = {{pair.second, 2}, {pair.first, 1}};
pair.first.show();
pair.second.show();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4Kc3RydWN0IEE7CnN0cnVjdCBCCnsKICAgIEEmIHJlZjsKICAgIGludCBuOwogICAgdm9pZCBzaG93KCkgY29uc3Q7Cn07CgpzdHJ1Y3QgQQp7CiAgICBCJiByZWY7CiAgICBpbnQgbjsKICAgIHZvaWQgc2hvdygpIGNvbnN0Owp9OwoKdm9pZCBBOjpzaG93KCkgY29uc3QKewogICAgc3RkOjpjb3V0IDw8ICJBLm4gaXMgIiA8PCBuCiAgICAgICAgICAgICAgPDwgIiBBLnJlZi5uIGlzICIgPDwgcmVmLm4KICAgICAgICAgICAgICA8PCAiIEEucmVmLnJlZi5uIGlzICIgPDwgcmVmLnJlZi5uCiAgICAgICAgICAgICAgPDwgIiBBLnJlZi5yZWYucmVmLm4gaXMgIiA8PCByZWYucmVmLnJlZi5uCiAgICAgICAgICAgICAgPDwgJ1xuJzsKfQoKdm9pZCBCOjpzaG93KCkgY29uc3QKewogICAgc3RkOjpjb3V0IDw8ICJCLm4gaXMgIiA8PCBuCiAgICAgICAgICAgICAgPDwgIiBCLnJlZi5uIGlzICIgPDwgcmVmLm4KICAgICAgICAgICAgICA8PCAiIEIucmVmLnJlZi5uIGlzICIgPDwgcmVmLnJlZi5uCiAgICAgICAgICAgICAgPDwgIiBCLnJlZi5yZWYucmVmLm4gaXMgIiA8PCByZWYucmVmLnJlZi5uCiAgICAgICAgICAgICAgPDwgJ1xuJzsKfQoKaW50IG1haW4oKQp7CiAgICBzdHJ1Y3Qge0EgZmlyc3Q7IEIgc2Vjb25kO30gcGFpciA9IHt7cGFpci5zZWNvbmQsIDJ9LCB7cGFpci5maXJzdCwgMX19OwogICAgcGFpci5maXJzdC5zaG93KCk7CiAgICBwYWlyLnNlY29uZC5zaG93KCk7Cn0K