#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::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); tester(intref); tester(intrref); // not a single true, thats wrong somehow
tester(std::move(intval)); tester(std::move(intref)); tester(std::move(intrref));
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZWluZm8+Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp2b2lkIHRlc3RlcihUJikKewoJc3RkOjpjb3V0IDw8ICJ0ZXN0ZXIoIiA8PCB0eXBlaWQoVCkubmFtZSgpIDw8ICImKTpcblx0bHZhbHVlIHJlZmVyZW5jZSAtICIgPDwgc3RkOjpib29sYWxwaGEgPDwKCQlzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlIDw8ICJcblx0cnZhbHVlIHJlZmVyZW5jZSAtICIgPDwgc3RkOjppc19ydmFsdWVfcmVmZXJlbmNlPFQ+Ojp2YWx1ZSA8PCAnXG4nOwp9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp2b2lkIHRlc3RlcihUJiYpCnsKCXN0ZDo6Y291dCA8PCAidGVzdGVyKCIgPDwgdHlwZWlkKFQpLm5hbWUoKSA8PCAiJiYpOlxuXHRsdmFsdWUgcmVmZXJlbmNlIC0gIiA8PCBzdGQ6OmlzX2x2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlCgkJPDwgIlxuXHRydmFsdWUgcmVmZXJlbmNlIC0gIiA8PCBzdGQ6OmlzX3J2YWx1ZV9yZWZlcmVuY2U8VD46OnZhbHVlIDw8ICdcbic7Cn0KCmludCBtYWluKCkKewoJc3RkOjpjb3V0IDw8ICJIb3cgb24gRWFydGggdGhhdCBpc19ydmFsdWVfcmVmZXJlbmNlIGFuZCBpc19sdmFsdWVfcmVmZXJlbmNlIHdvcms/IVxuIjsKCWludCBpbnR2YWx7IDEyMyB9OwlpbnQmIGludHJlZnsgaW50dmFsIH07CWludCBjb25zdCYmIGludHJyZWZ7IDEyMyB9OwoJdGVzdGVyKGludHZhbCk7CQl0ZXN0ZXIoaW50cmVmKTsJCQl0ZXN0ZXIoaW50cnJlZik7CQkJCQkJCQkJCS8vIG5vdCBhIHNpbmdsZSB0cnVlLCB0aGF0cyB3cm9uZyBzb21laG93Cgl0ZXN0ZXIoc3RkOjptb3ZlKGludHZhbCkpOwkJdGVzdGVyKHN0ZDo6bW92ZShpbnRyZWYpKTsJCXRlc3RlcihzdGQ6Om1vdmUoaW50cnJlZikpOwoJCgkKCQoJcmV0dXJuIDA7Cn0=