fork download
  1. #include <iostream>
  2. #include <typeinfo>
  3. using std::cout;
  4.  
  5. // проверяю написанное в https://h...content-available-to-author-only...r.com/post/322132/
  6. // (часть Сжатие ссылок и универсальные ссылки)
  7.  
  8. template<typename T>
  9. void tester(T&)
  10. {
  11. cout << "tester(" << typeid(T).name() << "&):\n\tlvalue reference - " << std::boolalpha <<
  12. std::is_lvalue_reference<T>::value << "\n\trvalue reference - " << std::is_rvalue_reference<T>::value << '\n';
  13. }
  14.  
  15. template<typename T>
  16. void tester(T&&)
  17. {
  18. cout << "tester(" << typeid(T).name() << "&&):\n\tlvalue reference - " << std::boolalpha <<
  19. std::is_lvalue_reference<T>::value << "\n\trvalue reference - " << std::is_rvalue_reference<T>::value << '\n';
  20. }
  21.  
  22. class T{};
  23.  
  24. void tests()
  25. {
  26. T value{};
  27. T& ref{ value};
  28. cout << "Testing lvalue reference.\t"; tester(ref); tester<T>(value);
  29. cout << "Testing rvalue reference.\t"; tester(T{}); tester<T>(T{});
  30. cout << "Testing incomperhensible stuff.\t"; tester(value); tester<T&>(value);
  31. }
  32.  
  33.  
  34. int main()
  35. {
  36. tests();
  37. return 0;
  38. }
Success #stdin #stdout 0s 4536KB
stdin
Standard input is empty
stdout
Testing lvalue reference.	tester(1T&):
	lvalue reference - false
	rvalue reference - false
tester(1T&):
	lvalue reference - false
	rvalue reference - false
Testing rvalue reference.	tester(1T&&):
	lvalue reference - false
	rvalue reference - false
tester(1T&&):
	lvalue reference - false
	rvalue reference - false
Testing incomperhensible stuff.	tester(1T&):
	lvalue reference - false
	rvalue reference - false
tester(1T&):
	lvalue reference - true
	rvalue reference - false