fork download
  1. #include<iostream>
  2.  
  3. class MyClass
  4. {
  5. public:
  6. MyClass() {std::cout << "Default Constructor\n";}
  7. MyClass(const MyClass &input) {std::cout << "Copy Constructor\n";}
  8. MyClass(MyClass &&input) {std::cout << "Move Constructor\n";}
  9. MyClass & operator=(const MyClass &input) {std::cout << "Assignment\n"; return *this;}
  10. friend MyClass operator+(const MyClass &lhs,const MyClass &rhs) {return lhs;}
  11. template<typename T>
  12. friend MyClass operator-(T &&lhs,T &&rhs) {return std::forward<T>(lhs);}
  13. };
  14.  
  15. MyClass something() {return MyClass();} // Dummy function to illustrate when RVO occurs
  16.  
  17. int main()
  18. {
  19. {
  20. std::cout << "Test 1+" << std::endl;
  21. MyClass a,b,c;
  22. c=a+b;
  23. }
  24. {
  25. std::cout << "Test 1-" << std::endl;
  26. MyClass a,b,c;
  27. c=a-b;
  28. }
  29. {
  30. std::cout << "Test 2+" << std::endl;
  31. MyClass a,b;
  32. MyClass c=a+b;
  33. }
  34. {
  35. std::cout << "Test 2-" << std::endl;
  36. MyClass a,b;
  37. MyClass c=a-b;
  38. }
  39. {
  40. std::cout << "Test 3+" << std::endl;
  41. MyClass a=something(),b=something();
  42. MyClass c=a+b;
  43. }
  44. {
  45. std::cout << "Test 3-" << std::endl;
  46. MyClass a=something(),b=something();
  47. MyClass c=a-b;
  48. }
  49. {
  50. std::cout << "Test 4+" << std::endl;
  51. MyClass c=something()+something();
  52. }
  53. {
  54. std::cout << "Test 4-" << std::endl;
  55. MyClass c=something()-something();
  56. }
  57. return 0;
  58. }
Success #stdin #stdout 0s 15232KB
stdin
Standard input is empty
stdout
Test 1+
Default Constructor
Default Constructor
Default Constructor
Copy Constructor
Assignment
Test 1-
Default Constructor
Default Constructor
Default Constructor
Copy Constructor
Assignment
Test 2+
Default Constructor
Default Constructor
Copy Constructor
Test 2-
Default Constructor
Default Constructor
Copy Constructor
Test 3+
Default Constructor
Default Constructor
Copy Constructor
Test 3-
Default Constructor
Default Constructor
Copy Constructor
Test 4+
Default Constructor
Default Constructor
Copy Constructor
Test 4-
Default Constructor
Default Constructor
Move Constructor