fork download
  1. #include <iostream>
  2.  
  3. struct test
  4. {
  5. test()
  6. {
  7. std::cout << "test ctor\n";
  8. }
  9. ~test()
  10. {
  11. std::cout << "test dtor\n";
  12. }
  13. };
  14.  
  15. struct Data {
  16. Data(const test &data = {}) : data_(data)
  17. {
  18. std::cout << "data ctor\n";
  19. }
  20. ~Data()
  21. {
  22. std::cout << "data dtor\n";
  23. }
  24. const test &data_;
  25.  
  26. void forceuse()
  27. {
  28. std::cout << "Using data\n";
  29. }
  30. };
  31.  
  32. Data create3(const test &data = {}) {
  33. std::cout << "in create3\n";
  34. return Data(data); // good
  35. }
  36.  
  37. int main() {
  38. {
  39. std::cout << "calling create3\n";
  40. auto data3 = create3(); // ok
  41. std::cout << "returned from create3\n";
  42. data3.forceuse();
  43. }
  44. }
  45.  
Success #stdin #stdout 0s 4356KB
stdin
Standard input is empty
stdout
calling create3
test ctor
in create3
data ctor
test dtor
returned from create3
Using data
data dtor