class RefCountedBase { protected: bool derefBase() { return true; } }; template class RefCounted : public RefCountedBase { public: void deref() { if (derefBase()) delete static_cast(this); } protected: // RefCounted() { } ~RefCounted() { } }; class Event : public RefCounted { public: Event(); virtual ~Event(); };