Mam kod:
#include <iostream>
#include <string>
#include <fstream>
#include <boost/serialization/serialization.hpp>
#include <boost/archive/xml_oarchive.hpp>
using namespace std;
class Test {
private:
friend class boost::serialization::access;
template < class Archive >
void serialize( Archive & ar, const unsigned int version ) {
ar & test;
}
public:
string test;
Test( string s ) :
test( s ) {
}
Test() {
}
};
void save(const Test &s, const char * filename){
// make an archive
std::ofstream ofs(filename);
assert(ofs.good());
boost::archive::xml_oarchive oa(ofs);
oa << BOOST_SERIALIZATION_NVP(s);
}
int main( int argc, char* argv[] ) {
Test s("test");
save(s, "test.xml");
cout << s.test;
}
i podczas próby kompilacji dostaję:
In file included from /usr/include/boost/archive/xml_oarchive.hpp:31,
from ../src/Testy.cpp:13:
/usr/include/boost/archive/basic_xml_oarchive.hpp: In member function ‘void boost::archive::basic_xml_oarchive<Archive>::save_override(T&, int) [with T = const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Archive = boost::archive::xml_oarchive]’:
/usr/include/boost/archive/detail/interface_oarchive.hpp:64: instantiated from ‘Archive& boost::archive::detail::interface_oarchive<Archive>::operator<<(T&) [with T = const std::basic_string<char, std::char_traits<char>, std::allocator<char> >, Archive = boost::archive::xml_oarchive]’
/usr/include/boost/archive/detail/interface_oarchive.hpp:72: instantiated from ‘Archive& boost::archive::detail::interface_oarchive<Archive>::operator&(T&) [with T = std::string, Archive = boost::archive::xml_oarchive]’
../src/Testy.cpp:24: instantiated from ‘void Test::serialize(Archive&, unsigned int) [with Archive = boost::archive::xml_oarchive]’
/usr/include/boost/serialization/access.hpp:109: instantiated from ‘static void boost::serialization::access::serialize(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = Test]’
/usr/include/boost/serialization/serialization.hpp:74: instantiated from ‘void boost::serialization::serialize(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = Test]’
/usr/include/boost/serialization/serialization.hpp:133: instantiated from ‘void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = Test]’
/usr/include/boost/archive/detail/oserializer.hpp:144: instantiated from ‘void boost::archive::detail::oserializer<Archive, T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*) const [with Archive = boost::archive::xml_oarchive, T = Test]’
../src/Testy.cpp:61: instantiated from here
/usr/include/boost/archive/basic_xml_oarchive.hpp:88: error: no matching function for call to ‘assertion_failed(mpl_::failed************ boost::serialization::is_wrapper<const std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::************)’
Z innymi archiwami działa poprawnie. Nie mogę dojść jaka jest tego przyczyna.
PS
Korzystam z Boost 1.37.0 i GCC 4.4.0