fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct hurg
  5. {
  6. hurg() { cout << "ctor" << endl; }
  7. hurg(const hurg&) { cout << "copy ctor" << endl; }
  8. hurg& operator=(const hurg&) { cout << "copy assign ctor" << endl; }
  9. hurg(hurg&&) { cout << "move ctor" << endl; }
  10. hurg& operator=(const hurg&&) { cout << "move assign ctor" << endl; }
  11.  
  12. ~hurg() { cout << "dtor" << endl; }
  13. };
  14.  
  15. hurg get_hurg() { return hurg(); }
  16.  
  17. hurg&& get_mhurg() { return hurg(); }
  18.  
  19. template <typename T>
  20. auto id(T&& x) -> decltype(auto) { return decltype(x)(x); }
  21.  
  22. int main() {
  23. cout << "const& get_hurg {" << endl;
  24. {
  25. const hurg& h = get_hurg();
  26. cout << "const& get_hurg -" << endl;
  27. }
  28. cout << "const& get_hurg }" << endl;
  29.  
  30. cout << "&& get_hurg {" << endl;
  31. {
  32. hurg&& h = get_hurg();
  33. cout << "&& get_hurg -" << endl;
  34. }
  35. cout << "&& get_hurg }" << endl;
  36.  
  37. cout << "const& get_mhurg {" << endl;
  38. {
  39. const hurg& h = get_hurg();
  40. cout << "const& get_mhurg -" << endl;
  41. }
  42. cout << "const& get_mhurg }" << endl;
  43.  
  44. cout << "&& get_mhurg {" << endl;
  45. {
  46. hurg&& h = get_hurg();
  47. cout << "&& get_mhurg -" << endl;
  48. }
  49. cout << "&& get_mhurg }" << endl;
  50.  
  51. cout << "const& id {" << endl;
  52. {
  53. const hurg& h = id(hurg());
  54. cout << "&& id -" << endl;
  55. }
  56. cout << "&& id }" << endl;
  57.  
  58. cout << "&& id {" << endl;
  59. {
  60. hurg&& h = id(hurg());
  61. cout << "&& id -" << endl;
  62. }
  63. cout << "&& id }" << endl;
  64.  
  65. return 0;
  66. }
Success #stdin #stdout 0s 3460KB
stdin
Standard input is empty
stdout
const& get_hurg {
ctor
const& get_hurg -
dtor
const& get_hurg }
&& get_hurg {
ctor
&& get_hurg -
dtor
&& get_hurg }
const& get_mhurg {
ctor
const& get_mhurg -
dtor
const& get_mhurg }
&& get_mhurg {
ctor
&& get_mhurg -
dtor
&& get_mhurg }
const& id {
ctor
dtor
&& id -
&& id }
&& id {
ctor
dtor
&& id -
&& id }