fork download
  1. #include <vector>
  2. #include <string>
  3. #include <iostream>
  4. #include <iomanip>
  5.  
  6. using namespace std;
  7.  
  8. struct tmpS {
  9. tmpS() {}
  10. tmpS(const tmpS&) {
  11. std::cout << "copy\n";
  12. }
  13. tmpS(tmpS&&) {
  14. std::cout << "move\n";
  15. }
  16. };
  17.  
  18. template<typename Type>
  19. void pass_to_construct(Type&& arg) { // универсальная ссылка
  20. tmpS t = std::forward<Type>(arg);
  21. }
  22.  
  23. template<typename T>
  24. struct v {
  25. v() {}
  26. void push_back(T&& value) { // вызовется эта перегрузка
  27. pass_to_construct(std::forward<T&&>(value));
  28. }
  29. void push_back(T& value) { // вызовется эта перегрузка
  30. pass_to_construct(std::forward<T&>(value));
  31. }
  32. };
  33.  
  34. int main()
  35. {
  36. v<tmpS> s;
  37. tmpS t;
  38. s.push_back(tmpS()); // rvalue
  39. s.push_back(t); // lvalue
  40. }
  41.  
  42.  
Success #stdin #stdout 0s 4412KB
stdin
Standard input is empty
stdout
move
copy