
I'd like to request the following functions added to shared_ptr's interface: template <class T> void * shared_ptr<T>::void_cast() const; template <class T> std::type_info const & shared_ptr<T>::type() const; The first function mimics the use of dynamic_cast<void *>(p) for pointers to polymorphic objects. The second function is similar to typeid(r), for references to polymorphic objects. Of course, void_cast needs to be specialized to apply the correct modifiers of T to the returned pointer type. There are two scenarios that need those functions: - when using shared_ptr<T> in contexts where T is incomplete (or void); - when the T in shared_ptr<T> has nothing to do with the type of the object managed by the shared_ptr's control block. For example, through the recently introduced aliasing constructor, it is possible for a shared_ptr<int> to manage the lifetime of an object of some user-defined type that has the int as a member. Both functions are critical for implementing proper serialization of shared_ptr objects. Emil Dotchevski