Hello Ion a others interprocess guru,
I'm currently using an interprocess::vector storing intreprocess::weak_ptr to data.
Sometimes after adding a shared_ptr to my vector with push_back, the weak_ptr stored at the end of the vector is not
the one I just inserted, but a copy of a previously inserted weak_ptr.

For examples the code below :
void addData (const SharableDataTypes<Data>::SharedPtrType & PData){
dataWPVector.push_back(PData);
if (dataWPVector.rbegin()->lock()->getObjectId() != PData->getObjectId()){
std::cerr << "After pushback in dataWPVector vector last elem Id=" <<  dataWPVector.rbegin()->lock()->getObjectId()
                         << " added cable Id =" << PData->getObjectId() << std::endl;
}
}

spills the trace :
"After pushback in  dataWPVector  vector last elem Id=50332165 added elem Id =352322053"
which should obviously not happen.
  
By adding some traces to the file  : boost/interprocess/containers/container/vector.hpp
I found that this case only happens during a resizing step when the method priv_range_insert_expand_backwards is used
and in one of the 8 cases I labeled "4/8 and NOT do_after" (see  http://pastebin.com/bLBwiBia line 41)

For easier test, I created a sample code which try to reproduce the problem : http://pastebin.com/rdpZA7CU
(Note : I used multiIndex to be the closest to our code).

I compiled it with gcc44 (GCC) 4.4.0 20090514 (Red Hat 4.4.0-6) on a 64b  Red Hat Enterprise Linux Server release 5.4 server
using Boost V1.47 with the command : 
gcc44 -std=c++0x -m64 -I/path_to_boot/boost_1_47_0/include/ -lrt -lstdc++ testPushBackVector.cc -o testPushBackVector

Note that this program does not reproduce the problem, as when it runs, only the priv_range_insert_new_allocation method is called.
I don't know how to force the program to use priv_range_insert_expand_backwards to reproduce the problem.

So now, the question : Am I doing something wrong or is this a bug ? 
Thanks for your help,
Gaëtan