
Hi, the serialization docs about shared_ptr state that you have to call void_cast_register to use shared_ptr: ---------- This indicates that we're not quite done. [...] In this case we need only the latter function so we can replace the base object serialization with: // register the relationship between each derived class // its polymorphic base void_cast_register< boost::detail::sp_counted_base, boost::detail::sp_counted_base_impl<P, D>
();
(http://boost.org/libs/serialization/doc/shared_ptr.html) There are two issues with this: a) The actual void_cast_register declaration has its parameters in the reverse order: ---------- template<class Derived, class Base> inline BOOST_DLLEXPORT const void * void_cast_register( const Derived * /* dnull = NULL */, const Base * /* bnull = NULL */ ) BOOST_USED; ---------- (void_cast.hpp) b) It doesn't seem to work either way, although there are different exceptions in both cases. The demo_shared_ptr.cpp doesn't even call it, instead the following is used: ---------- oa.register_type( static_cast< boost::detail::sp_counted_base_impl< B *, boost::checked_deleter<B> > * >(NULL) ---------- (demo_shared_ptr.cpp) This one actually works, the use counter is properly updated. So I guess the documentation is outdated, isn't it? Malte