#ifndef _utl_ShadowPtrPolicy_h_ #define _utl_ShadowPtrPolicy_h_ //#include //#include #include //#include #ifdef __GNUC__ #include #include #endif #include namespace utl { class NoDereferenceCheck { public: template static void Examine(T* const) { } }; class ThrowOnZeroDereference { public: template static void Examine(T* const ptr) { if (!ptr) { std::stringstream err; err << "Dereferencing zero pointer to "; #ifdef __GNUC__ int status; char* const rName = abi::__cxa_demangle(typeid(T).name(), 0, 0, &status); err << rName; free(rName); #else err << typeid(T).name(); #endif std::cerr << err.str() << std::endl; throw utl::NonExistentComponentException(err.str()); } } }; } #endif