impl_ptr_policy::shared
// In header: <detail/shared.hpp> template<typename impl_type, typename... more_types> struct shared : public std::shared_ptr< impl_type > { // types typedef typename std::conditional< 1<=sizeof...(more_types), typename detail::types< more_types... >::first_type, std::allocator< impl_type >>::type allocator; typedef typename std::allocator_traits< allocator >::template rebind_alloc< impl_type > alloc_type; typedef std::shared_ptr< impl_type > & base_ref; // construct/copy/destruct shared(std::nullptr_t); template<typename... arg_types> shared(detail::in_place_type, arg_types &&...); // public member functions template<typename derived_type, typename... arg_types> void emplace(arg_types &&...); };