template void utilspp::setLibraryLongevity(T * obj, unsigned int longevity, TDestroyer d) { using namespace utilspp::PrivateMembers; LifetimeTracker * p = new ConcreteLifetimeTracker( obj, longevity, d); utilspp::LifetimeLibrarySingleton::instance().add(p); }; template void utilspp::LifetimeLibrary::scheduleDestruction(T *obj, void (* func)()) { utilspp::PrivateMembers::adapter adapter = { func }; utilspp::setLibraryLongevity(obj, getLongevity( obj ), adapter); } template void utilspp::LifetimeLibrary::onDeadReference() { throw std::logic_error("Dead reference detected"); } template utilspp::LifetimeLibraryGuard::~LifetimeLibraryGuard() { T::instance().terminate(); }