Ticket #10740: bug.cpp

File bug.cpp, 1.8 KB (added by Simon Etter <ettersi@…>, 8 years ago)

Minimal example

Line 
1#include <iostream>
2#include <vector>
3#include <fstream>
4
5#include <boost/serialization/vector.hpp>
6#include <boost/archive/xml_oarchive.hpp>
7#include <boost/archive/xml_iarchive.hpp>
8
9struct dummy {
10 template<class Archive>
11 void serialize(Archive& ar, unsigned int version) {}
12};
13
14int main() {
15 // One-level container
16 // For comparison only. This shows the expected behaviour.
17 {
18 std::cout << "One-level vector:" << std::endl;
19 std::vector<dummy> l(1);
20 dummy* pd = &l.back();
21 {
22 std::ofstream ofs("one_level.xml");
23 boost::archive::xml_oarchive oa(ofs);
24 oa << BOOST_SERIALIZATION_NVP(l) << BOOST_SERIALIZATION_NVP(pd);
25 }
26 {
27 std::ifstream ifs("one_level.xml");
28 boost::archive::xml_iarchive ia(ifs);
29 ia >> BOOST_SERIALIZATION_NVP(l) >> BOOST_SERIALIZATION_NVP(pd);
30 }
31 std::cout << &l.back() << " " << pd << std::endl;
32 }
33
34 std::cout << std::endl;
35
36 // Two-level container
37 // This is buggy.
38 {
39 std::cout << "Two-level vector:" <<std::endl;
40 std::vector<std::vector<dummy>> l(1, std::vector<dummy>(1));
41 dummy* pd = &l.back().back();
42 std::cout << pd << std::endl;
43 {
44 std::ofstream ofs("two_level.xml");
45 boost::archive::xml_oarchive oa(ofs);
46 oa << BOOST_SERIALIZATION_NVP(l) << BOOST_SERIALIZATION_NVP(pd);
47 }
48 {
49 std::ifstream ifs("two_level.xml");
50 boost::archive::xml_iarchive ia(ifs);
51 ia >> BOOST_SERIALIZATION_NVP(l) >> BOOST_SERIALIZATION_NVP(pd);
52 }
53 std::cout << &l.back().back() << " " << pd << std::endl;
54 }
55
56 return 0;
57}
58