fork download
  1. #include<iostream>
  2. #include<fstream>
  3.  
  4. #include<boost/archive/xml_oarchive.hpp>
  5. #include<boost/archive/xml_iarchive.hpp>
  6. #include<boost/serialization/nvp.hpp>
  7.  
  8. typedef union{
  9. struct { long x, y; };
  10. } long2;
  11.  
  12. namespace boost{ namespace serialization {
  13. template<class Archive> void serialize(Archive &ar, long2 &i, const unsigned version){
  14. ar & make_nvp("x",i.x);
  15. ar & make_nvp("y",i.y);
  16. }
  17. }};
  18.  
  19. int main(void){
  20. // output, works fine
  21. long2 a; a.x=1;// a.y=2;
  22. std::ofstream out("/tmp/a.xml");
  23. boost::archive::xml_oarchive outA(out);
  24. outA<<boost::serialization::make_nvp("foo",a);
  25. out.close();
  26.  
  27. // input, compile-time error
  28. long2 b;
  29. std::ifstream in("/tmp/a.xml");
  30. boost::archive::xml_iarchive inA(in);
  31. inA>>boost::serialization::make_nvp("foo",b);
  32. in.close();
  33.  
  34. // should write 1,2
  35. std::cerr<<b.x<<","<<b.y<<std::endl;
  36. };
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
/usr/include/boost/archive/detail/oserializer.hpp: In static member function ‘static void boost::archive::detail::save_non_pointer_type<Archive, T>::invoke(Archive&, const T&) [with Archive = boost::archive::xml_oarchive, T = long2]’:
/usr/include/boost/archive/detail/oserializer.hpp:506:   instantiated from ‘void boost::archive::save(Archive&, const T&) [with Archive = boost::archive::xml_oarchive, T = long2]’
/usr/include/boost/archive/detail/common_oarchive.hpp:64:   instantiated from ‘void boost::archive::detail::common_oarchive<Archive>::save_override(T&, int) [with T = const long2, Archive = boost::archive::xml_oarchive]’
/usr/include/boost/archive/basic_xml_oarchive.hpp:102:   instantiated from ‘void boost::archive::basic_xml_oarchive<Archive>::save_override(const boost::serialization::nvp<T>&, int) [with T = long2, 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 boost::serialization::nvp<long2>, Archive = boost::archive::xml_oarchive]’
prog.cpp:24:   instantiated from here
/usr/include/boost/archive/detail/oserializer.hpp:293: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’ 
/usr/include/boost/archive/detail/oserializer.hpp:293: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’ 
/usr/include/boost/archive/detail/iserializer.hpp: In static member function ‘static void boost::archive::detail::load_non_pointer_type<Archive, T>::invoke(Archive&, T&) [with Archive = boost::archive::xml_iarchive, T = long2]’:
/usr/include/boost/archive/detail/iserializer.hpp:532:   instantiated from ‘void boost::archive::load(Archive&, T&) [with Archive = boost::archive::xml_iarchive, T = long2]’
/usr/include/boost/archive/detail/common_iarchive.hpp:59:   instantiated from ‘void boost::archive::detail::common_iarchive<Archive>::load_override(T&, int) [with T = long2, Archive = boost::archive::xml_iarchive]’
/usr/include/boost/archive/basic_xml_iarchive.hpp:81:   instantiated from ‘void boost::archive::basic_xml_iarchive<Archive>::load_override(const boost::serialization::nvp<T>&, int) [with T = long2, Archive = boost::archive::xml_iarchive]’
/usr/include/boost/archive/xml_iarchive.hpp:74:   instantiated from ‘void boost::archive::xml_iarchive_impl<Archive>::load_override(T&, int) [with T = const boost::serialization::nvp<long2>, Archive = boost::archive::xml_iarchive]’
/usr/include/boost/archive/detail/interface_iarchive.hpp:61:   instantiated from ‘Archive& boost::archive::detail::interface_iarchive<Archive>::operator>>(T&) [with T = const boost::serialization::nvp<long2>, Archive = boost::archive::xml_iarchive]’
prog.cpp:31:   instantiated from here
/usr/include/boost/archive/detail/iserializer.hpp:405: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’ 
/usr/include/boost/archive/detail/iserializer.hpp:405: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE<false>’ 
stdout
Standard output is empty