#include <boost/smart_ptr.hpp>
#include <functional>
using namespace std;
// TEMPLATE CLASS mem_fun_void_t
template<class _Ty>
class mem_fun_void_t : public unary_function<_Ty *, void> {
public:
explicit mem_fun_void_t(void (_Ty::*_Pm)())
: _Ptr(_Pm) {}
void operator()(_Ty *_P) const
{ ((_P->*_Ptr)()); }
private:
void (_Ty::*_Ptr)();
};
// TEMPLATE FUNCTION mem_fun_void
template<class _Ty> inline
mem_fun_void_t<_Ty> mem_fun_void(void (_Ty::*_Pm)())
{return (mem_fun_void_t<_Ty>(_Pm)); }
class CA
{
public:
CA()
{
}
void release()
{
}
};
int main(int argc, char* argv[])
{
boost::shared_ptr< CA > sp(new CA, mem_fun_void(&CA::release));
return 0;
}