#include <iostream>
#include <type_traits>
using namespace std;
struct C { int m; };
int i = 42;
int&& f() { return std::move(i); }
static_assert(std::is_same<
decltype(&C::m),
int C::*>::value, "");
static_assert(std::is_same<
decltype(&(C::m)),
int*>::value, "");
static_assert(std::is_same<
decltype(i),
int>::value, "");
static_assert(std::is_same<
decltype((i)),
int&>::value, "");
auto x1= i;
auto x2 = f();
static_assert(std::is_same<
decltype(x1),
int>::value, "");
static_assert(std::is_same<
decltype(x2),
int>::value, "");
static_assert(std::is_same<
decltype(f()),
int&&>::value, "");
decltype(auto) x5 = i;
decltype(auto) x6 = (i);
decltype(auto) x7 = f();
static_assert(std::is_same<
decltype(x5),
int>::value, "");
static_assert(std::is_same<
decltype(x6),
int&>::value, "");
static_assert(std::is_same<
decltype(x7),
int&&>::value, "");
int main() {
// your code goes here
std::cout << "hello\n";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpzdHJ1Y3QgQyB7IGludCBtOyB9OwppbnQgaSA9ICA0MjsKaW50JiYgZigpIHsgcmV0dXJuIHN0ZDo6bW92ZShpKTsgfQoKc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8CiAgICBkZWNsdHlwZSgmQzo6bSksCiAgICBpbnQgQzo6Kj46OnZhbHVlLCAiIik7CnN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPAogICAgZGVjbHR5cGUoJihDOjptKSksCiAgICBpbnQqPjo6dmFsdWUsICIiKTsKCnN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPAogICAgZGVjbHR5cGUoaSksCiAgICBpbnQ+Ojp2YWx1ZSwgIiIpOwpzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTwKICAgIGRlY2x0eXBlKChpKSksCiAgICBpbnQmPjo6dmFsdWUsICIiKTsKCmF1dG8geDE9IGk7CmF1dG8geDIgPSBmKCk7CnN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPAogICAgICBkZWNsdHlwZSh4MSksCiAgICAgIGludD46OnZhbHVlLCAiIik7CnN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPAogICAgICBkZWNsdHlwZSh4MiksCiAgICAgIGludD46OnZhbHVlLCAiIik7CnN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPAogICAgICBkZWNsdHlwZShmKCkpLAogICAgICBpbnQmJj46OnZhbHVlLCAiIik7CgpkZWNsdHlwZShhdXRvKSB4NSA9IGk7CmRlY2x0eXBlKGF1dG8pIHg2ID0gKGkpOwpkZWNsdHlwZShhdXRvKSB4NyA9IGYoKTsKCnN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPAogICAgICBkZWNsdHlwZSh4NSksCiAgICAgIGludD46OnZhbHVlLCAiIik7CnN0YXRpY19hc3NlcnQoc3RkOjppc19zYW1lPAogICAgICBkZWNsdHlwZSh4NiksCiAgICAgIGludCY+Ojp2YWx1ZSwgIiIpOwpzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfc2FtZTwKICAgICAgZGVjbHR5cGUoeDcpLAogICAgICBpbnQmJj46OnZhbHVlLCAiIik7CgppbnQgbWFpbigpIHsKCS8vIHlvdXIgY29kZSBnb2VzIGhlcmUKICAgIHN0ZDo6Y291dCA8PCAiaGVsbG9cbiI7CglyZXR1cm4gMDsKfQ==