diff --git a/include/boost/serialization/collections_load_imp.hpp b/include/boost/serialization/collections_load_imp.hpp index e042c0c1..4b0fedeb 100644 --- a/include/boost/serialization/collections_load_imp.hpp +++ b/include/boost/serialization/collections_load_imp.hpp @@ -95,7 +95,7 @@ collection_load_impl( detail::stack_construct u(ar, item_version); ar >> boost::serialization::make_nvp("item", u.reference()); t.push_back(boost::move(u.reference())); - ar.reset_object_address(& t.back() , & u.reference()); + ar.reset_object_address(& t.back() , u.address()); } } diff --git a/include/boost/serialization/serialization.hpp b/include/boost/serialization/serialization.hpp index a4d04723..17d8bc94 100644 --- a/include/boost/serialization/serialization.hpp +++ b/include/boost/serialization/serialization.hpp @@ -114,14 +114,6 @@ inline void serialize_adl( T & t, const unsigned int file_version ){ - // note usage of function overloading to delay final resolution - // until the point of instantiation. This works around the two-phase - // lookup "feature" which inhibits redefintion of a default function - // template implementation. Due to Robert Ramey - // - // Note that this trick generates problems for compiles which don't support - // PFTO, suppress it here. As far as we know, there are no compilers - // which fail to support PFTO while supporting two-phase lookup. const version_type v(file_version); serialize(ar, t, v); } @@ -132,7 +124,7 @@ inline void save_construct_data_adl( const T * t, const unsigned int file_version ){ - // see above + const version_type v(file_version); save_construct_data(ar, t, v); } diff --git a/src/basic_iarchive.cpp b/src/basic_iarchive.cpp index a5455a53..344e37a3 100644 --- a/src/basic_iarchive.cpp +++ b/src/basic_iarchive.cpp @@ -257,7 +257,10 @@ basic_iarchive_impl::reset_object_address( break; } for(; i < m_moveable_objects.end; ++i){ - void const * const this_address = object_id_vector[i].address; + const aobject & ao = object_id_vector[i]; + if(ao.loaded_as_pointer) + continue; + void const * const this_address = ao.address; // calculate displacement from this level // warning - pointer arithmetic on void * is in herently non-portable // but expected to work on all platforms in current usage @@ -497,7 +500,6 @@ basic_iarchive_impl::load_pointer( serialization::state_saver w_end(m_moveable_objects.end); - // add to list of serialized objects so that we can properly handle // cyclic strucures object_id_vector.push_back(aobject(t, cid)); diff --git a/src/basic_oarchive.cpp b/src/basic_oarchive.cpp index 653260c3..4df648dc 100644 --- a/src/basic_oarchive.cpp +++ b/src/basic_oarchive.cpp @@ -309,7 +309,7 @@ basic_oarchive_impl::save_object( return; } -// save a pointer to an object instance +// colle inline void basic_oarchive_impl::save_pointer( basic_oarchive & ar,