#include <cstdio>
using namespace std;
struct Foo {
int a;
Foo(const Foo& foo) : a(foo.a) {
printf("Foo(Foo& foo) - %d\n", a);
}
Foo(int x) : a(x) {
printf("Foo(int) a == %d\n", a);
}
~Foo() {
printf("~Foo() a == %d\n", a);
a = 0;
}
};
auto& fooRef(const Foo& f) {
return f;
}
int main() {
const Foo& ref = fooRef(Foo(2));
printf("ref.a == %d\n", ref.a);
printf("end of main\n");
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBGb28gewogICAgaW50IGE7CiAgICBGb28oY29uc3QgRm9vJiBmb28pIDogYShmb28uYSkgewogICAgCXByaW50ZigiRm9vKEZvbyYgZm9vKSAtICVkXG4iLCBhKTsKICAgIH0KICAgIEZvbyhpbnQgeCkgOiBhKHgpIHsKICAgIAlwcmludGYoIkZvbyhpbnQpIGEgPT0gJWRcbiIsIGEpOwogICAgfQogICAgfkZvbygpIHsKICAgIAlwcmludGYoIn5Gb28oKSBhID09ICVkXG4iLCBhKTsKICAgIAlhID0gMDsKICAgIH0KfTsKCmF1dG8mIGZvb1JlZihjb25zdCBGb28mIGYpIHsKICAgIHJldHVybiBmOwp9CgppbnQgbWFpbigpIHsKICAgIGNvbnN0IEZvbyYgcmVmID0gZm9vUmVmKEZvbygyKSk7CiAgICBwcmludGYoInJlZi5hID09ICVkXG4iLCByZWYuYSk7CiAgICBwcmludGYoImVuZCBvZiBtYWluXG4iKTsKICAgIHJldHVybiAwOwp9