#include <iostream>
#include <memory>
#include <exception>
using namespace std;
int randomint() {
throw std::runtime_error("whoops");
return 4;
}
struct Movable {
Movable():value(1997){}
Movable(Movable&& other){std::cout << "move ctor\n"; other.value=0;}
int value;
};
void byval(Movable x, int y) {
std::cout << x.value + y << "\n";
}
int main() {
Movable n;
try {
byval(std::move(n), randomint());
} catch (std::exception& e) {
std::cout << e.what() << "\n";
}
std::cout << "intact: " << n.value << "\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgojaW5jbHVkZSA8ZXhjZXB0aW9uPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IHJhbmRvbWludCgpIHsKICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoIndob29wcyIpOwogIAogIHJldHVybiA0Owp9CgpzdHJ1Y3QgTW92YWJsZSB7CiBNb3ZhYmxlKCk6dmFsdWUoMTk5Nyl7fQogTW92YWJsZShNb3ZhYmxlJiYgb3RoZXIpe3N0ZDo6Y291dCA8PCAibW92ZSBjdG9yXG4iOyBvdGhlci52YWx1ZT0wO30KIGludCB2YWx1ZTsKfTsKCnZvaWQgYnl2YWwoTW92YWJsZSB4LCBpbnQgeSkgewogIHN0ZDo6Y291dCA8PCB4LnZhbHVlICsgeSA8PCAiXG4iOwkKfQoKaW50IG1haW4oKSB7CgkKCU1vdmFibGUgbjsKCXRyeSB7CgkJYnl2YWwoc3RkOjptb3ZlKG4pLCByYW5kb21pbnQoKSk7Cgl9IGNhdGNoIChzdGQ6OmV4Y2VwdGlvbiYgZSkgewoJCXN0ZDo6Y291dCA8PCBlLndoYXQoKSA8PCAiXG4iOwoJfQoJCglzdGQ6OmNvdXQgPDwgImludGFjdDogIiA8PCBuLnZhbHVlIDw8ICJcbiI7CglyZXR1cm4gMDsKfQ==