#include <iostream>
#include <typeinfo>
using std::cout;
// проверяю написанное в https://h...content-available-to-author-only...r.com/post/322132/
// (часть Сжатие ссылок и универсальные ссылки)
template<typename T>
void tester(T&)
{
cout << "tester(" << typeid(T).name() << "&):\n\tlvalue reference - " << std::boolalpha <<
std::is_lvalue_reference<T>::value << "\n\trvalue reference - " << std::is_rvalue_reference<T>::value << '\n';
}
template<typename T>
void tester(T&&)
{
cout << "tester(" << typeid(T).name() << "&&):\n\tlvalue reference - " << std::boolalpha <<
std::is_lvalue_reference<T>::value << "\n\trvalue reference - " << std::is_rvalue_reference<T>::value << '\n';
}
class T{};
void tests()
{
T value{};
T& ref{ value};
cout << "Testing lvalue reference.\t"; tester(ref); tester<T>(value);
cout << "Testing rvalue reference.\t"; tester(T{}); tester<T>(T{});
cout << "Testing incomperhensible stuff.\t"; tester(value); tester<T&>(value);
}
int main()
{
tests();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CnVzaW5nIHN0ZDo6Y291dDsKCi8vINC/0YDQvtCy0LXRgNGP0Y4g0L3QsNC/0LjRgdCw0L3QvdC+0LUg0LIgaHR0cHM6Ly9oLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5yLmNvbS9wb3N0LzMyMjEzMi8KLy8gKNGH0LDRgdGC0Ywg0KHQttCw0YLQuNC1INGB0YHRi9C70L7QuiDQuCDRg9C90LjQstC10YDRgdCw0LvRjNC90YvQtSDRgdGB0YvQu9C60LgpCgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp2b2lkIHRlc3RlcihUJikKewogIGNvdXQgPDwgInRlc3RlcigiIDw8IHR5cGVpZChUKS5uYW1lKCkgPDwgIiYpOlxuXHRsdmFsdWUgcmVmZXJlbmNlIC0gIiA8PCBzdGQ6OmJvb2xhbHBoYSA8PAogICAgc3RkOjppc19sdmFsdWVfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSA8PCAiXG5cdHJ2YWx1ZSByZWZlcmVuY2UgLSAiIDw8IHN0ZDo6aXNfcnZhbHVlX3JlZmVyZW5jZTxUPjo6dmFsdWUgPDwgJ1xuJzsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCB0ZXN0ZXIoVCYmKQp7CiAgY291dCA8PCAidGVzdGVyKCIgPDwgdHlwZWlkKFQpLm5hbWUoKSA8PCAiJiYpOlxuXHRsdmFsdWUgcmVmZXJlbmNlIC0gIiA8PCBzdGQ6OmJvb2xhbHBoYSA8PAogICAgc3RkOjppc19sdmFsdWVfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSA8PCAiXG5cdHJ2YWx1ZSByZWZlcmVuY2UgLSAiIDw8IHN0ZDo6aXNfcnZhbHVlX3JlZmVyZW5jZTxUPjo6dmFsdWUgPDwgJ1xuJzsKfQoKY2xhc3MgVHt9OwoKdm9pZCB0ZXN0cygpCnsKICBUIHZhbHVle307CiAgVCYgcmVmeyB2YWx1ZX07CiAgY291dCA8PCAiVGVzdGluZyBsdmFsdWUgcmVmZXJlbmNlLlx0IjsJdGVzdGVyKHJlZik7CXRlc3RlcjxUPih2YWx1ZSk7CiAgY291dCA8PCAiVGVzdGluZyBydmFsdWUgcmVmZXJlbmNlLlx0IjsJdGVzdGVyKFR7fSk7CXRlc3RlcjxUPihUe30pOwogIGNvdXQgPDwgIlRlc3RpbmcgaW5jb21wZXJoZW5zaWJsZSBzdHVmZi5cdCI7CXRlc3Rlcih2YWx1ZSk7CXRlc3RlcjxUJj4odmFsdWUpOwp9CgoKaW50IG1haW4oKSAKewogIHRlc3RzKCk7CiAgcmV0dXJuIDA7Cn0=