fork(1) download
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6.  
  7. class Thing {
  8. int a;
  9. public:
  10. Thing(int v = 0): a (v) {}
  11. virtual const char * type_name(){ return "Thing"; }
  12. virtual int value() { return a; }
  13. };
  14.  
  15. class OtherThing : public Thing {
  16. public:
  17. OtherThing(int v): Thing(v) {}
  18. OtherThing() {}
  19.  
  20. virtual const char * type_name() { return "Other Thing"; }
  21. };
  22.  
  23. template <typename TO_T>
  24. inline TO_T* turn_thing_to(Thing* p)
  25. {
  26. return ::new(p) TO_T(static_cast<TO_T&&>(*p));
  27. }
  28.  
  29. int main() {
  30. Thing * thing = new Thing(42);
  31. std::cout << thing->type_name() << "\n";
  32. std::cout << thing->value() << "\n";
  33.  
  34. turn_thing_to<OtherThing>(thing);
  35. std::cout << thing->type_name() << "\n";
  36. std::cout << thing->value() << "\n";
  37. return 0;
  38. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
Thing
42
Other Thing
42