Index: boost/serialization/void_cast.hpp =================================================================== --- boost/serialization/void_cast.hpp (Revision 58091) +++ boost/serialization/void_cast.hpp (Working copy) @@ -108,8 +108,10 @@ protected: void recursive_register(bool includes_virtual_base = false) const; void recursive_unregister() const; +private: + // Data members + mutable bool m_includes_virtual_base; public: - // Data members const extended_type_info * m_derived; const extended_type_info * m_base; /*const*/ std::ptrdiff_t m_difference; Index: libs/serialization/src/void_cast.cpp =================================================================== --- libs/serialization/src/void_cast.cpp (Revision 58091) +++ libs/serialization/src/void_cast.cpp (Working copy) @@ -211,6 +211,7 @@ void_caster::recursive_register(bool includes_virtual_base) const { void_cast_detail::set_type & s = void_cast_detail::void_caster_registry::get_mutable_instance(); + m_includes_virtual_base = includes_virtual_base; #ifdef BOOST_SERIALIZATION_LOG std::clog << "recursive_register\n"; @@ -239,7 +240,7 @@ (*it)->m_derived, m_base, m_difference + (*it)->m_difference, - includes_virtual_base, + includes_virtual_base || (*it)->m_includes_virtual_base, this ); } @@ -256,7 +257,7 @@ m_derived, (*it)->m_base, m_difference + (*it)->m_difference, - includes_virtual_base, + includes_virtual_base || (*it)->m_includes_virtual_base, this ); }