#include #include #include #include #include #include struct dummy { template void serialize(Archive& ar, unsigned int version) {} }; int main() { // One-level container // For comparison only. This shows the expected behaviour. { std::cout << "One-level vector:" << std::endl; std::vector l(1); dummy* pd = &l.back(); { std::ofstream ofs("one_level.xml"); boost::archive::xml_oarchive oa(ofs); oa << BOOST_SERIALIZATION_NVP(l) << BOOST_SERIALIZATION_NVP(pd); } { std::ifstream ifs("one_level.xml"); boost::archive::xml_iarchive ia(ifs); ia >> BOOST_SERIALIZATION_NVP(l) >> BOOST_SERIALIZATION_NVP(pd); } std::cout << &l.back() << " " << pd << std::endl; } std::cout << std::endl; // Two-level container // This is buggy. { std::cout << "Two-level vector:" <> l(1, std::vector(1)); dummy* pd = &l.back().back(); std::cout << pd << std::endl; { std::ofstream ofs("two_level.xml"); boost::archive::xml_oarchive oa(ofs); oa << BOOST_SERIALIZATION_NVP(l) << BOOST_SERIALIZATION_NVP(pd); } { std::ifstream ifs("two_level.xml"); boost::archive::xml_iarchive ia(ifs); ia >> BOOST_SERIALIZATION_NVP(l) >> BOOST_SERIALIZATION_NVP(pd); } std::cout << &l.back().back() << " " << pd << std::endl; } return 0; }