#include <iostream>
#include <typeinfo>
//template<typename T>
//void tester(T&)
//{
// std::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&&)
{
std::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';
}
int main()
{
std::cout << "How on Earth that is_rvalue_reference and is_lvalue_reference work?!\n";
int intval{ 123 }; int& intref{ intval }; int const&& intrref{ 123 };
tester(intval); // lvalue reference
tester(intref); // lvalue reference
tester(intrref); // lvalue reference // not a single true, thats wrong somehow
tester(std::move(intval)); // false
tester(std::move(intref)); // false
tester(std::move(intrref)); // false
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+CgovL3RlbXBsYXRlPHR5cGVuYW1lIFQ+Ci8vdm9pZCB0ZXN0ZXIoVCYpCi8vewovLwlzdGQ6OmNvdXQgPDwgInRlc3RlcigiIDw8IHR5cGVpZChUKS5uYW1lKCkgPDwgIiYpOlxuXHRsdmFsdWUgcmVmZXJlbmNlIC0gIiA8PCBzdGQ6OmJvb2xhbHBoYSA8PAovLwkJc3RkOjppc19sdmFsdWVfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSA8PCAiXG5cdHJ2YWx1ZSByZWZlcmVuY2UgLSAiIDw8IHN0ZDo6aXNfcnZhbHVlX3JlZmVyZW5jZTxUPjo6dmFsdWUgPDwgJ1xuJzsKLy99Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp2b2lkIHRlc3RlcihUJiYpCnsKCXN0ZDo6Y291dCA8PCAidGVzdGVyKCIgPDwgdHlwZWlkKFQpLm5hbWUoKSA8PCAiJiYpOlxuXHRsdmFsdWUgcmVmZXJlbmNlIC0gIiAgPDwgc3RkOjpib29sYWxwaGEgPDwgc3RkOjppc19sdmFsdWVfcmVmZXJlbmNlPFQ+Ojp2YWx1ZQoJCTw8ICJcblx0cnZhbHVlIHJlZmVyZW5jZSAtICIgPDwgc3RkOjppc19ydmFsdWVfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSA8PCAnXG4nOwp9CgppbnQgbWFpbigpCnsKCXN0ZDo6Y291dCA8PCAiSG93IG9uIEVhcnRoIHRoYXQgaXNfcnZhbHVlX3JlZmVyZW5jZSBhbmQgaXNfbHZhbHVlX3JlZmVyZW5jZSB3b3JrPyFcbiI7CglpbnQgaW50dmFseyAxMjMgfTsJaW50JiBpbnRyZWZ7IGludHZhbCB9OwlpbnQgY29uc3QmJiBpbnRycmVmeyAxMjMgfTsKCQoJdGVzdGVyKGludHZhbCk7CQkvLyBsdmFsdWUgcmVmZXJlbmNlCQoJdGVzdGVyKGludHJlZik7CQkvLyBsdmFsdWUgcmVmZXJlbmNlCQkKCXRlc3RlcihpbnRycmVmKTsJCS8vIGx2YWx1ZSByZWZlcmVuY2UJCQkJCQkJCQkvLyBub3QgYSBzaW5nbGUgdHJ1ZSwgdGhhdHMgd3Jvbmcgc29tZWhvdwoJdGVzdGVyKHN0ZDo6bW92ZShpbnR2YWwpKTsJLy8gZmFsc2UKCXRlc3RlcihzdGQ6Om1vdmUoaW50cmVmKSk7CS8vIGZhbHNlCgl0ZXN0ZXIoc3RkOjptb3ZlKGludHJyZWYpKTsJLy8gZmFsc2UKCQoJcmV0dXJuIDA7Cn0=