[serialization] check_object_versioning(), STATIC_ASSERTION_FAILURE

Please help, or point me where should i read about it. What is this versioning and why my code was compiled with boost 1.39 will get compilation errors in 1.43? Code: #include <list> #include <boost/serialization/access.hpp> #include <boost/serialization/level.hpp> #include <boost/serialization/split_member.hpp> #include <boost/serialization/tracking.hpp> #include <boost/serialization/list.hpp> #include <boost/serialization/variant.hpp> #include <boost/serialization/version.hpp> ... typedef boost::variant <__int32, unsigned __int32, std::string, std::wstring > param_t; // note: I've tried to use boost::int32_t and others, result is the same typedef std::list< param_t > params_list_t; ... class instruction { public: ... private: friend class boost::serialization::access; /**< Make accessible private members for boost serialization */ void save (boost::archive::xml_oarchive& ar, unsigned int version) const; void load (boost::archive::xml_iarchive& ar, unsigned int version); BOOST_SERIALIZATION_SPLIT_MEMBER() private: ... params_list_t m_params; /**< List of parameters */ }; BOOST_CLASS_IMPLEMENTATION(instruction, boost::serialization::object_serializable); BOOST_CLASS_TRACKING(instruction, boost::serialization::track_never) BOOST_CLASS_IMPLEMENTATION(nvp<instruction>, boost::serialization::object_serializable) BOOST_CLASS_TRACKING(nvp<instruction>, boost::serialization::track_never) BOOST_CLASS_VERSION(instruction, 1); BOOST_CLASS_IMPLEMENTATION(param_t, boost::serialization::object_serializable); BOOST_CLASS_TRACKING(param_t, boost::serialization::track_never) BOOST_CLASS_IMPLEMENTATION(nvp<param_t>, boost::serialization::object_serializable) BOOST_CLASS_TRACKING(nvp<param_t>, boost::serialization::track_never) BOOST_CLASS_VERSION(param_t, 1) BOOST_CLASS_VERSION(params_list_t, 1) BOOST_CLASS_IMPLEMENTATION(nvp<params_list_t>, boost::serialization::object_serializable) BOOST_CLASS_TRACKING(nvp<params_list_t>, boost::serialization::track_never) BOOST_CLASS_IMPLEMENTATION(params_list_t, boost::serialization::object_serializable); BOOST_CLASS_TRACKING(params_list_t, boost::serialization::track_never) BOOST_CLASS_IMPLEMENTATION(nvp<instructions_list_t>, boost::serialization::object_serializable) BOOST_CLASS_TRACKING(nvp<instructions_list_t>, boost::serialization::track_never) BOOST_CLASS_IMPLEMENTATION(instructions_list_t, boost::serialization::object_serializable) BOOST_CLASS_TRACKING(instructions_list_t, boost::serialization::track_never) CPP file: void instruction::save (boost::archive::xml_oarchive& ar, unsigned int version) const { // ... ar << BOOST_SERIALIZATION_NVP(m_params); // error is here, all other lines commented // ... } Error (MS VS2008): 1>d:\Work\manager\third_party\boost\include\boost/archive/detail/check.hpp(78) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>' 1> with 1> [ 1> x=false 1> ] 1> d:\Work\manager\third_party\boost\include\boost/archive/detail/oserializer.hpp(307) : see reference to function template instantiation 'void boost::archive::detail::check_object_versioning<T>(void)' being compiled 1> with 1> [ 1> T=const params_list_t 1> ] 1> d:\Work\manager\third_party\boost\include\boost/archive/detail/oserializer.hpp(525) : see reference to function template instantiation 'void boost::archive::detail::save_non_pointer_type<Archive>::invoke<const T>(Archive &,const T &)' being compiled 1> with 1> [ 1> Archive=boost::archive::xml_oarchive, 1> T=const params_list_t 1> ] 1> d:\Work\manager\third_party\boost\include\boost/archive/detail/common_oarchive.hpp(69) : see reference to function template instantiation 'void boost::archive::save<Archive,T>(Archive &,T &)' being compiled 1> with 1> [ 1> Archive=boost::archive::xml_oarchive, 1> T=const params_list_t 1> ] ... This is a first error message place: template<class T> inline void check_object_versioning(){ typedef BOOST_DEDUCED_TYPENAME mpl::or_< BOOST_DEDUCED_TYPENAME mpl::greater< serialization::implementation_level<T>, mpl::int_<serialization::object_serializable> >, BOOST_DEDUCED_TYPENAME mpl::equal_to< serialization::version<T>, mpl::int_<0> > > typex; // trap attempts to serialize with objects that don't // save class information in the archive with versioning. BOOST_STATIC_ASSERT(typex::value); } I have understanding about what is BOOST_STATIC_ASSERT, but I haven't any ideas about what I'm doing wrong. Changelog reading between 1.39 and 1.43 hasn't clarified anything. -- реклама ----------------------------------------------------------- Три новые линейки хостинг-планов - всё что нужно Вашему сайту! 6 месяцев хостинга бесплатно и домен в подарок. http://Hvosting.ua
participants (1)
-
Витя Истомин