#include <stdio.h>
class A
{
public:
A() { printf("ctor %X\n", this); }
A(const A& v) { printf("copy %X=%X\n", this, &v); *this=v; }
int v, v2;
};
A fn(A v) { printf("fn %X\n", &v); v.v=9; return v; }
A fn2(A v) { printf("fn2 %X\n", &v); return fn(v); }
int main(){
printf("Test 1\n");
A a;
A b = fn(a);
printf("addr=%X\n", &b);
printf("Test 2\n");
A c = fn(A());
printf("addr=%X\n", &c);
printf("Test 3\n");
A d = fn2(A());
printf("addr=%X\n", &d);
}
I2luY2x1ZGUgPHN0ZGlvLmg+CmNsYXNzIEEKewpwdWJsaWM6CglBKCkgeyBwcmludGYoImN0b3IgJVhcbiIsIHRoaXMpOyB9CglBKGNvbnN0IEEmIHYpIHsgcHJpbnRmKCJjb3B5ICVYPSVYXG4iLCB0aGlzLCAmdik7ICp0aGlzPXY7IH0KCWludCB2LCB2MjsKfTsKCkEgZm4oQSB2KSB7IHByaW50ZigiZm4gJVhcbiIsICZ2KTsgdi52PTk7IHJldHVybiB2OyB9CkEgZm4yKEEgdikgeyBwcmludGYoImZuMiAlWFxuIiwgJnYpOyByZXR1cm4gZm4odik7IH0KaW50IG1haW4oKXsKCXByaW50ZigiVGVzdCAxXG4iKTsKCUEgYTsKCUEgYiA9IGZuKGEpOwoJcHJpbnRmKCJhZGRyPSVYXG4iLCAmYik7CglwcmludGYoIlRlc3QgMlxuIik7CglBIGMgPSBmbihBKCkpOwoJcHJpbnRmKCJhZGRyPSVYXG4iLCAmYyk7CglwcmludGYoIlRlc3QgM1xuIik7CglBIGQgPSBmbjIoQSgpKTsKCXByaW50ZigiYWRkcj0lWFxuIiwgJmQpOwp9Cg==