#include <iostream>
using namespace std;
class S {
public:
int i;
double d;
S(S &&o) noexcept : i(o.i), d(o.d) {
cout << "move!\n";
}
S(const S &o) : i(o.i), d(o.d) {
cout << "copy!\n";
}
S operator=(const S &o) {
i = o.i;
d = o.d;
cout << "copy asignment!\n";
return *this;
}
S operator=(S &&o) {
i = o.i;
d = o.d;
cout << "move asignment!\n";
return *this;
}
S() {
i = 1;
d = -1;
cout << "ctor!\n";
}
// S fun() {
// return *this;
// }
};
S fun() {
cout << "fun!\n";
S a;
a.i = 100;
a.d = -100;
return a;
}
int main() {
auto b = fun();
cout << b.i << ' ' << b.d << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgUyB7CQpwdWJsaWM6CglpbnQgaTsKCWRvdWJsZSBkOwoJUyhTICYmbykgbm9leGNlcHQgOiBpKG8uaSksIGQoby5kKSB7CgkJY291dCA8PCAibW92ZSFcbiI7Cgl9CgkKCVMoY29uc3QgUyAmbykgOiBpKG8uaSksIGQoby5kKSB7CgkJY291dCA8PCAiY29weSFcbiI7Cgl9CgkKCVMgb3BlcmF0b3I9KGNvbnN0IFMgJm8pIHsKCQlpID0gby5pOwoJCWQgPSBvLmQ7CgkJY291dCA8PCAiY29weSBhc2lnbm1lbnQhXG4iOwoJCXJldHVybiAqdGhpczsKCX0KCQoJUyBvcGVyYXRvcj0oUyAmJm8pIHsKCQlpID0gby5pOwoJCWQgPSBvLmQ7CgkJY291dCA8PCAibW92ZSBhc2lnbm1lbnQhXG4iOwoJCXJldHVybiAqdGhpczsKCX0KCglTKCkgewoJCWkgPSAxOwoJCWQgPSAtMTsKCQljb3V0IDw8ICJjdG9yIVxuIjsKCX0KCQoJLy8gUyBmdW4oKSB7CgkvLyAJcmV0dXJuICp0aGlzOwoJLy8gfQp9OwoKUyBmdW4oKSB7Cgljb3V0IDw8ICJmdW4hXG4iOwoJUyBhOwoJYS5pID0gMTAwOwoJYS5kID0gLTEwMDsKCXJldHVybiBhOwp9CgoKaW50IG1haW4oKSB7CglhdXRvIGIgPSBmdW4oKTsKCWNvdXQgPDwgYi5pIDw8ICcgJyA8PCBiLmQgPDwgZW5kbDsKCXJldHVybiAwOwp9