fork(1) download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct foo {};
  5. struct xyz {};
  6.  
  7. struct base {
  8. base(foo) { cout << "base(foo)\n"; }
  9. base(xyz) { cout << "base(xyz)\n"; }
  10. base(const base&) { cout << "base(base) - cctor\n"; }
  11. };
  12.  
  13. struct derived : base {
  14. template<class... Args>
  15. derived(Args&&... args) : base(forward<Args>(args)...) {
  16. cout << __PRETTY_FUNCTION__ << endl;
  17. }
  18.  
  19. template<class Arg>
  20. derived(Arg&& arg) : base(arg) {
  21. cout << __PRETTY_FUNCTION__ << endl;
  22. }
  23.  
  24. template<class Arg>
  25. derived(const Arg& arg) : base(arg) {
  26. cout << __PRETTY_FUNCTION__ << endl;
  27. }
  28.  
  29. derived(const derived& d) : base(d) { cout << "derived cctor\n"; }
  30.  
  31. derived(derived&& d) : base(d) { cout << "derived mctor\n"; }
  32.  
  33. derived(xyz x) : base(x) { cout << "derived(xyz)\n"; }
  34. };
  35.  
  36. int main() {
  37. derived d1((foo()));
  38. cout << "-----" << endl;
  39. derived d2((xyz()));
  40. cout << "-----" << endl;
  41. derived d3(d1);
  42. cout << "-----" << endl;
  43. return 0;
  44. }
Success #stdin #stdout 0s 3412KB
stdin
Standard input is empty
stdout
base(foo)
derived::derived(Arg&&) [with Arg = foo]
-----
base(xyz)
derived(xyz)
-----
base(base) - cctor
derived::derived(Arg&&) [with Arg = derived&]
-----