1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <iostream> #include <cstdlib> using namespace std; struct Noisy { int n; Noisy() :n(0) { cout << "Noisy()\n"; } Noisy(const Noisy & o) :n(o.n) { cout << "copy Noisy\n"; } Noisy(Noisy&& o) :n(o.n) { cout << "move Noisy\n"; } }; Noisy foo(bool x) { Noisy a; a.n = 5; Noisy b; b.n = 10; // does this not exclude the possibility of copy elision? if (x) return a; else return b; } int main() { // does this not move? See output below Noisy n = foo(rand()%2==0); cout << n.n; } |
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGxpYj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgTm9pc3kgewogICAgICAgIGludCBuOwoJTm9pc3koKSA6bigwKSB7IGNvdXQgPDwgIk5vaXN5KClcbiI7IH0KCU5vaXN5KGNvbnN0IE5vaXN5ICYgbykgOm4oby5uKSB7IGNvdXQgPDwgImNvcHkgTm9pc3lcbiI7IH0KCU5vaXN5KE5vaXN5JiYgbykgOm4oby5uKSB7IGNvdXQgPDwgIm1vdmUgTm9pc3lcbiI7IH0KfTsKCk5vaXN5IGZvbyhib29sIHgpCnsKCU5vaXN5IGE7CglhLm4gPSA1OwoJTm9pc3kgYjsKCWIubiA9IDEwOwoKICAgICAgICAvLyBkb2VzIHRoaXMgbm90IGV4Y2x1ZGUgdGhlIHBvc3NpYmlsaXR5IG9mIGNvcHkgZWxpc2lvbj8KCWlmICh4KSByZXR1cm4gYTsKCWVsc2UgcmV0dXJuIGI7Cn0KCmludCBtYWluKCkKewogICAgICAgIC8vIGRvZXMgdGhpcyBub3QgbW92ZT8gIFNlZSBvdXRwdXQgYmVsb3cKCU5vaXN5IG4gPSBmb28ocmFuZCgpJTI9PTApOwoJY291dCA8PCBuLm47Cn0=
-
upload with new input
-
result: Success time: 0s memory: 2884 kB returned value: 0
Noisy() Noisy() move Noisy 10


