$include_dir="/home/hyper-archives/boost-users/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-users] [1.41][serialization] deserialization of weak_ptr fails
From: Alexander Gutenev (gutenev_at_[hidden])
Date: 2009-12-14 05:09:29
The example below works in 1.40 and fails in 1.41
#include <string>
#include <sstream>
#include <vector>
#include <boost/smart_ptr.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
struct X
  : boost::enable_shared_from_this<X>
{
  X(){}
  virtual ~X() {}
  explicit X(int i) : i(i) {}
  template<class Archive>
  void serialize(Archive & ar, const unsigned int version)
  {
    ar & boost::serialization::make_nvp("i", i);
    (void) version;
  }
  int i;
};
typedef boost::shared_ptr<X> PX;
typedef std::vector<PX> VPX;
int main()
{
  std::ostringstream oss;
  VPX vpx;
  vpx.push_back(PX(new X(2)));
  vpx.push_back(PX(new X(5)));
  vpx.push_back(PX(new X(7)));
  boost::archive::xml_oarchive oa(oss);
  oa << boost::serialization::make_nvp("v", vpx);
  vpx.clear();
  std::string s = oss.str();
  std::istringstream iss(s);
  boost::archive::xml_iarchive ia(iss);
  ia >>  boost::serialization::make_nvp("v", vpx);
  PX px = vpx[1].get()->shared_from_this();
  return 0;
}