This issue has already been discussed but was never addressed :
http://lists.boost.org/boost-users/2008/11/42417.php
https://svn.boost.org/trac/boost/ticket/4044
 
I don't understand why objects loaded as pointer can't be relocated :
 
- These objects are stored in basic_iarchive_impl::object_id_vector as the others, so, technically speaking, we can change their "address"
 
- There is situations where it is mandatory : for example when data, sharing some objects,  are serialized / dispatched in separate archives
  => without relocating service at loading, sharing of object is not possible.
 
 
For the moment, I workaround the limitation with a hack in the method basic_iarchive_impl::reset_object_address :
 
I remove the "safeguard" which checks that the method is applied on a tracked object and immediately after
the concerned object is read :
 
================================================
for(i = moveable_objects_recent; i < moveable_objects_end; ++i){
  if(old_address == object_id_vector[i].address)
     break;
}
for(; i < moveable_objects_end; ++i){
================================================
 
is replaced by
 
=================================================
for(i = 0; i < object_id_vector.size(); ++i){
=================================================
 
 
I think that the limit can be properly removed by handling in "basic_iarchive_impl::load_pointer" the "moveable_objects_..." variables
as it is done in "basic_iarchive_impl::load_object"
 
As objects created by the serialization system are marked with "loaded_as_pointer" = true
(this data is used by  basic_iarchive_impl::delete_created_pointers) I think this data should be set to false by "reset_object_address".
 
Is there other implication ?
 
 
Alain.