fork download
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. struct A {
  5. int x;
  6. explicit A(int val) : x(val) {}
  7. };
  8.  
  9. void add(A&& a, A&& b, A&& c) {
  10. std::cout << "&&:" << (a.x + b.x + c.x) << std::endl;
  11. }
  12.  
  13. void add(const A& a, const A& b, const A& c) {
  14. std::cout << "const&:" << (a.x + b.x + c.x) << std::endl;
  15. }
  16.  
  17. template <typename ...Args>
  18. void call(Args&& ...args) {
  19. add(std::forward<Args>(args)...);
  20. }
  21.  
  22. int main() {
  23. A a(4);
  24. A b(5);
  25. A c(6);
  26. add(A(1), A(3), A(2));
  27. add(a, b, c);
  28. add(A(1), b, A(2));
  29. add(a, A(2), A(2));
  30. std::cout << "-----\n";
  31. call(A(1), A(3), A(2));
  32. call(a, b, c);
  33. call(A(1), b, A(2));
  34. call(a, A(2), A(2));
  35. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
&&:6
const&:15
const&:8
const&:8
-----
&&:6
const&:15
const&:8
const&:8