fork download
  1. #include <iostream>
  2.  
  3. template <typename T>
  4. void func_impl(T&) {std::cout << "lvalue\n";}
  5.  
  6. template <typename T>
  7. void func_impl(const T&) {std::cout << "const lvalue\n";}
  8.  
  9. template <typename T>
  10. void func_impl(T&&) {std::cout << "rvalue\n";}
  11.  
  12. template <typename T>
  13. void func_impl(const T&&) {std::cout << "const rvalue\n";}
  14.  
  15. template <typename T>
  16. void func(T &&t)
  17. {
  18. func_impl(std::forward<T>(t));
  19. }
  20.  
  21. int main()
  22. {
  23. int lvalue = 0;
  24. const int clvalue = 0;
  25. func(lvalue);
  26. func(clvalue);
  27. func(4);
  28. }
Success #stdin #stdout 0s 3096KB
stdin
Standard input is empty
stdout
lvalue
const lvalue
rvalue