#include <iostream>
#include <utility>
#include <functional>
using namespace std;
template <typename T>
struct TypeInfo
{
T t;
enum {
IsNothrowMoveConstructible = noexcept(T(std::move(t)))
};
bool test()//enum
{
T t;
bool val = noexcept(T(std::move(t)));
return val;
};
};
struct U{};
struct V{
V(){}
V(V&& x) noexcept{}
};
int main() {
TypeInfo <U> u;
TypeInfo <V> v;
std::cout<<u.test()<<" "<<v.test()<<std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gCnN0cnVjdCBUeXBlSW5mbyAKewogICAgVCB0OyAKICAgIGVudW0gewogICAgICAgIElzTm90aHJvd01vdmVDb25zdHJ1Y3RpYmxlID0gbm9leGNlcHQoVChzdGQ6Om1vdmUodCkpKQogICAgfTsgCiAgICBib29sIHRlc3QoKS8vZW51bSAKICAgIHsKICAgICAgICBUIHQ7CiAgICAgICAgYm9vbCB2YWwgPSBub2V4Y2VwdChUKHN0ZDo6bW92ZSh0KSkpOwogICAgICAgIHJldHVybiB2YWw7CiAgICB9Owp9OwoKc3RydWN0IFV7fTsKc3RydWN0IFZ7ClYoKXt9ClYoViYmIHgpIG5vZXhjZXB0e30gCQp9OwoKaW50IG1haW4oKSB7CglUeXBlSW5mbyA8VT4gdTsgCglUeXBlSW5mbyA8Vj4gdjsgCglzdGQ6OmNvdXQ8PHUudGVzdCgpPDwiICI8PHYudGVzdCgpPDxzdGQ6OmVuZGw7IAoJcmV0dXJuIDA7Cn0=