class source_of_B
{
class B &source;
source_of_B(B &source): source(source) {}
friend class A;
friend class B;
};
class B
{
int x;
B(int x): x(x) {}
friend class A;
public:
B(const source_of_B &arg): x(arg.source.x) {}
};
class A
{
B b;
public:
A(): b(5) {}
source_of_B create_object() { return b; }
B create_object2() { return b; }
};
int main()
{
A a;
B b = a.create_object();
auto b2 = a.create_object2();
}
Y2xhc3Mgc291cmNlX29mX0IKewogIGNsYXNzIEIgJnNvdXJjZTsKICBzb3VyY2Vfb2ZfQihCICZzb3VyY2UpOiBzb3VyY2Uoc291cmNlKSB7fQogIGZyaWVuZCBjbGFzcyBBOwogIGZyaWVuZCBjbGFzcyBCOwp9OwpjbGFzcyBCCnsKICBpbnQgeDsKICBCKGludCB4KTogeCh4KSB7fQogIGZyaWVuZCBjbGFzcyBBOwpwdWJsaWM6CiAgQihjb25zdCBzb3VyY2Vfb2ZfQiAmYXJnKTogeChhcmcuc291cmNlLngpIHt9Cn07CmNsYXNzIEEKewogIEIgYjsKcHVibGljOgogIEEoKTogYig1KSB7fQogIHNvdXJjZV9vZl9CIGNyZWF0ZV9vYmplY3QoKSB7IHJldHVybiBiOyB9CiAgQiBjcmVhdGVfb2JqZWN0MigpIHsgcmV0dXJuIGI7IH0KfTsKCmludCBtYWluKCkKewogIEEgYTsKICBCIGIgPSBhLmNyZWF0ZV9vYmplY3QoKTsKICBhdXRvIGIyID0gYS5jcmVhdGVfb2JqZWN0MigpOwp9