#include <iostream>
using namespace std;
struct A {
A() { log("construct"); }
A(A const&) { log("copy-construct"); }
A(A&&) noexcept { log("move-construct"); }
A& operator=(A const&) noexcept { log("copy-assign"); return *this; }
A& operator=(A&&) noexcept { log("move-assign"); return *this; }
static void log(char const * msg) {
std::cout << msg << "\n";
}
};
int main() {
A x, y;
x = std::move_if_noexcept(y);
return 0;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0cnVjdCBBIHsKICBBKCkgICAgICAgICB7IGxvZygiY29uc3RydWN0Iik7IH0KICBBKEEgY29uc3QmKSB7IGxvZygiY29weS1jb25zdHJ1Y3QiKTsgfQogIEEoQSYmKSBub2V4Y2VwdCB7IGxvZygibW92ZS1jb25zdHJ1Y3QiKTsgfQoKICBBJiBvcGVyYXRvcj0oQSBjb25zdCYpIG5vZXhjZXB0IHsgbG9nKCJjb3B5LWFzc2lnbiIpOyByZXR1cm4gKnRoaXM7IH0KICBBJiBvcGVyYXRvcj0oQSYmKSAgICAgIG5vZXhjZXB0IHsgbG9nKCJtb3ZlLWFzc2lnbiIpOyByZXR1cm4gKnRoaXM7IH0KCiAgc3RhdGljIHZvaWQgbG9nKGNoYXIgY29uc3QgKiBtc2cpIHsKICAgIHN0ZDo6Y291dCA8PCBtc2cgPDwgIlxuIjsKICB9Cn07CgppbnQgbWFpbigpIHsKICBBIHgsIHk7CiAgeCA9IHN0ZDo6bW92ZV9pZl9ub2V4Y2VwdCh5KTsKICAKICByZXR1cm4gMDsKfQ==