From 93c08b048c55f1dd60bf29b3e2c73ef75a9c0909 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Tue, 24 Nov 2015 16:53:10 +1100 Subject: [PATCH] memory/deleter: add function calling deleter used with unique_ptr in the deletion phase --- memory/deleter.hpp | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/memory/deleter.hpp b/memory/deleter.hpp index d0e1694c..1e85160e 100644 --- a/memory/deleter.hpp +++ b/memory/deleter.hpp @@ -17,7 +17,31 @@ #ifndef __UTIL_MEMORY_DELETER_HPP #define __UTIL_MEMORY_DELETER_HPP +#include + namespace util { namespace memory { + template + class func_deleter { + public: + using func_t = std::function; + + func_deleter (func_t _func): + m_func (_func) + { ; } + + inline void operator() (T *t) + { m_func (t); } + + private: + func_t m_func; + }; + + + // dispatch object deletion to a known member function. + // + // XXX: Generates a "sorry, unimplemented" under GCC (which is + // effectively an ICE). Their bug tracker seems to indicate they don't + // give a fuck, so we can't use this except under clang. template class owner_deleter { public: @@ -25,7 +49,7 @@ namespace util { namespace memory { m_owner (owner) { ; } - void operator() (T *t) + inline void operator() (T *t) { (m_owner.*F) (t); }