#include <iostream>
using namespace std;
struct A {
A() {cout<<"A:"<<this<<endl;}
~A() {cout<<"~A:"<<this<<endl;}
void f() const {cout<<x<<endl;}
int x = 5;
};
struct B {
B(const A& a) : a(a) {
cout<<"B"<<endl;
}
void g() {
a.f();
}
const A a;
};
int main() {
// your code goes here
B*b;
{
A a;
cout<<"before f"<<endl;
b = new B(move(a));
cout<<"after f"<<endl;
a.f();
}
b->g();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IEEgewoJQSgpIHtjb3V0PDwiQToiPDx0aGlzPDxlbmRsO30KCX5BKCkge2NvdXQ8PCJ+QToiPDx0aGlzPDxlbmRsO30KCXZvaWQgZigpIGNvbnN0IHtjb3V0PDx4PDxlbmRsO30KCWludCB4ID0gNTsKfTsKCnN0cnVjdCBCIHsKQihjb25zdCBBJiBhKSA6IGEoYSkgewoJY291dDw8IkIiPDxlbmRsOwp9CnZvaWQgZygpIHsKCWEuZigpOwp9CmNvbnN0IEEgYTsKfTsKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJQipiOwoJewoJQSBhOwoJY291dDw8ImJlZm9yZSBmIjw8ZW5kbDsKCWIgPSBuZXcgQihtb3ZlKGEpKTsKCWNvdXQ8PCJhZnRlciBmIjw8ZW5kbDsKCWEuZigpOwoJfQoJYi0+ZygpOwoJcmV0dXJuIDA7Cn0=