/* * program9.cc */ #include #include #include #include "demangle.h" using namespace std; template struct Object_Tracer { Object_Tracer(); ~Object_Tracer(); }; template Object_Tracer::Object_Tracer() { cout << "Object created: " << demangle_name(typeid(T)) << " (" << this << ")\n"; } template Object_Tracer::~Object_Tracer() { cout << "Object destroyed: " << demangle_name(typeid(T)) << " (" << this << ")\n"; } template class Wrapper: Object_Tracer> { public: Wrapper(T value = T{}) : value_{ value } {} private: T value_; }; int main() { Wrapper wi{ 1 }; // to be Wrapper Wrapper* wip = new Wrapper{ 2 }; // to be Wrapper* Wrapper wstr1{ 2.3 }; delete wip; Wrapper wstr2; return 0; }