I want to use boost::log
at some point, but I cannot pass a std::shared_ptr
as a parameter, because the compiler (VS2010) cannot convert it into a
You could do it like this:
template<typename T>
boost::shared_ptr<T> make_shared_ptr(std::shared_ptr<T>& ptr)
{
return boost::shared_ptr<T>(ptr.get(), [ptr](T*) mutable {ptr.reset();});
}
template<typename T>
std::shared_ptr<T> make_shared_ptr(boost::shared_ptr<T>& ptr)
{
return std::shared_ptr<T>(ptr.get(), [ptr](T*) mutable {ptr.reset();});
}
EDIT: Note that this does not work with weak references to the source ptr. So be careful with those!