
Hello! Some days ago I've faced with very strange problem with boost::serialization it doesn't compile, though docs says that it should. After some research I've found that changing the order of header files included fixes the problem. It can be illustrated on a base of the demo.cpp program included in distribution: The original order: #include <boost/archive/text_iarchive.hpp> #include <boost/archive/text_oarchive.hpp> #include <boost/serialization/base_object.hpp> #include <boost/serialization/utility.hpp> #include <boost/serialization/list.hpp> The modified order [doesn't compile!]: #include <boost/serialization/base_object.hpp> #include <boost/serialization/utility.hpp> #include <boost/serialization/list.hpp> #include <boost/archive/text_iarchive.hpp> #include <boost/archive/text_oarchive.hpp> It is crucial to include these files first #include <boost/archive/text_iarchive.hpp> #include <boost/archive/text_oarchive.hpp> it is because of many files (may be indirectly) include boost/serialization/type_info_implementation.hpp header that uses BOOST_SERIALIZATION_DEFAULT_TYPE_INFO macro without defining it, and #include <boost/archive/text_iarchive.hpp> #include <boost/archive/text_oarchive.hpp> headers define this macro in some way. to conclude: I have found it very disappointing that changing of order of included headers changes code correctness so dramatically. I want it to be fixed in some way. Thanks for great and incredibly helpful library anyway, Oleg Abrosimov. PS: The compiler (VC7.1) output: Compiling... demo.cpp D:\home\olegabr\devel\boost_1_33_1\boost\archive\detail\oserializer.hpp(131) : error C2027: use of undefined type 'boost::serialization::extended_type_info_null<T>' with [ T=bus_schedule ] D:\home\olegabr\devel\boost_1_33_1\boost\archive\detail\oserializer.hpp(131) : see reference to class template instantiation 'boost::serialization::extended_type_info_null<T>' being compiled with [ T=bus_schedule ] D:\home\olegabr\devel\boost_1_33_1\boost\archive\detail\oserializer.hpp(128) : while compiling class-template member function 'bool boost::archive::detail::oserializer<Archive,T>::is_polymorphic(void) const' with [ Archive=boost::archive::text_oarchive, T=bus_schedule ] D:\home\olegabr\devel\boost_1_33_1\boost\archive\detail\oserializer.hpp(264) : see reference to class template instantiation 'boost::archive::detail::oserializer<Archive,T>' being compiled with [ Archive=boost::archive::text_oarchive, T=bus_schedule ] D:\home\olegabr\devel\boost_1_33_1\boost\archive\detail\oserializer.hpp(263) : while compiling class-template member function 'void boost::archive::detail::save_non_pointer_type<Archive,T>::save_standard::invoke(Archive &,const bus_schedule &)' with [ Archive=boost::archive::text_oarchive, T=bus_schedule ] D:\home\olegabr\devel\boost_1_33_1\boost\archive\detail\oserializer.hpp(322) : see reference to class template instantiation 'boost::archive::detail::save_non_pointer_type<Archive,T>::save_standard' being compiled with [ Archive=boost::archive::text_oarchive, T=bus_schedule ] D:\home\olegabr\devel\boost_1_33_1\boost\archive\detail\oserializer.hpp(310) : while compiling class-template member function 'void boost::archive::detail::save_non_pointer_type<Archive,T>::invoke(Archive &,const bus_schedule &)' with [ Archive=boost::archive::text_oarchive, T=bus_schedule ] D:\home\olegabr\devel\boost_1_33_1\boost\archive\detail\oserializer.hpp(536) : see reference to class template instantiation 'boost::archive::detail::save_non_pointer_type<Archive,T>' being compiled with [ Archive=boost::archive::text_oarchive, T=bus_schedule ] D:\home\olegabr\devel\boost_1_33_1\boost\archive\basic_text_oarchive.hpp(78) : see reference to function template instantiation 'void boost::archive::save<Archive,T>(Archive &,T &)' being compiled with [ Archive=boost::archive::text_oarchive, T=const bus_schedule ] D:\home\olegabr\devel\boost_1_33_1\boost\archive\detail\interface_oarchive.hpp(78) : see reference to function template instantiation 'void boost::archive::basic_text_oarchive<Archive>::save_override<T>(T &,int)' being compiled with [ Archive=boost::archive::text_oarchive, T=const bus_schedule ] demo.cpp(286) : see reference to function template instantiation 'Archive &boost::archive::detail::interface_oarchive<Archive>::operator <<<const bus_schedule>(T &)' being compiled with [ Archive=boost::archive::text_oarchive, T=const bus_schedule ] D:\home\olegabr\devel\boost_1_33_1\boost\archive\detail\oserializer.hpp(131) : error C2146: syntax error : missing ';' before identifier 'typex' D:\home\olegabr\devel\boost_1_33_1\boost\archive\detail\oserializer.hpp(131) : error C2065: 'typex' : undeclared identifier