Ticket #2984: boost_serialize_protected_bug_minimal.cc

File boost_serialize_protected_bug_minimal.cc, 1.4 KB (added by Eric Moyer <eric_moyer@…>, 13 years ago)

Minimal code to reproduce the problem

Line 
1#include <iostream>
2#include <fstream>
3#include <boost/archive/text_oarchive.hpp>
4#include <boost/archive/text_iarchive.hpp>
5#include <boost/serialization/export.hpp>
6#include <boost/serialization/base_object.hpp>
7
8using namespace boost;
9using namespace std;
10
11class Base1{
12 friend class boost::serialization::access;
13public:
14 Base1(){}
15 virtual void print(){ cout << "Base1" << endl;}
16private:
17 template<class Archive>
18 void serialize(Archive & ar, const unsigned int version){}
19};
20
21BOOST_CLASS_EXPORT_GUID(Base1,"bugtry.Base1")
22
23
24class Base2{
25 friend class boost::serialization::access;
26public:
27 Base2(){}
28 virtual void print(){ cout << "Base2" << endl;}
29private:
30 template<class Archive>
31 void serialize(Archive & ar, const unsigned int version){
32 }
33};
34
35BOOST_CLASS_EXPORT_GUID(Base2,"bugtry.Base2")
36
37class Derived:public Base1, protected Base2{
38 friend class boost::serialization::access;
39public:
40 Derived(){};
41 virtual void print(){ cout << "Derived" << endl;}
42private:
43 template<class Archive>
44 void serialize(Archive & ar, const unsigned int version){
45 ar & boost::serialization::base_object<Base1>(*this);
46 ar & boost::serialization::base_object<Base2>(*this);
47 }
48};
49
50BOOST_CLASS_EXPORT_GUID(Derived,"bugtry.Derived")
51
52int main(int argc,char **argv) {
53 Derived d;
54 d.print();
55 ofstream o("bugtry.out");
56 boost::archive::text_oarchive out(o);
57 out << d;
58 return 0;
59}