#include <iostream>
#include <utility>
class Bar;
class Foo
{
Bar& refBar;
public:
int n;
Foo(Bar& refBar) : refBar(refBar), n(1) {}
void show() const;
};
class Bar
{
Foo& refFoo;
public:
int n;
Bar(Foo& refFoo) : refFoo(refFoo), n(2) {}
void show() const;
};
void Foo::show() const
{
std::cout << "Foo.n is " << n
<< " Foo.refBar.n is " << refBar.n
<< '\n';
}
void Bar::show() const
{
std::cout << "Bar.n is " << n
<< " Bar.refFoo.n is " << refFoo.n
<< '\n';
}
int main()
{
std::pair<Foo, Bar> p(p.second, p.first);
p.first.show();
p.second.show();
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KY2xhc3MgQmFyOwpjbGFzcyBGb28KewogICAgQmFyJiByZWZCYXI7CnB1YmxpYzoKICAgIGludCBuOwogICAgRm9vKEJhciYgcmVmQmFyKSA6IHJlZkJhcihyZWZCYXIpLCBuKDEpIHt9CiAgICB2b2lkIHNob3coKSBjb25zdDsKfTsKCmNsYXNzIEJhcgp7CiAgICBGb28mIHJlZkZvbzsKcHVibGljOgogICAgaW50IG47CiAgICBCYXIoRm9vJiByZWZGb28pIDogcmVmRm9vKHJlZkZvbyksIG4oMikge30KICAgIHZvaWQgc2hvdygpIGNvbnN0Owp9OwoKdm9pZCBGb286OnNob3coKSBjb25zdAp7CiAgICBzdGQ6OmNvdXQgPDwgIkZvby5uIGlzICIgPDwgbgogICAgICAgICAgICAgIDw8ICIgRm9vLnJlZkJhci5uIGlzICIgPDwgcmVmQmFyLm4KICAgICAgICAgICAgICA8PCAnXG4nOwp9Cgp2b2lkIEJhcjo6c2hvdygpIGNvbnN0CnsKICAgICBzdGQ6OmNvdXQgPDwgIkJhci5uIGlzICIgPDwgbiAKICAgICAgICAgICAgICAgPDwgIiBCYXIucmVmRm9vLm4gaXMgIiA8PCByZWZGb28ubgogICAgICAgICAgICAgICA8PCAnXG4nOwp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6cGFpcjxGb28sIEJhcj4gcChwLnNlY29uZCwgcC5maXJzdCk7CiAgICBwLmZpcnN0LnNob3coKTsKICAgIHAuc2Vjb25kLnNob3coKTsKfQo=