
We have system data written out to an XML archive and being de-serialized at application startup. One object type in the archive we written at version 1 by a newer version of the application. We then ran an older version of the software which only understood version 0 of the object. Does serialization not check the 'BOOST_CLASS_VERSION' of an object before attempting to de-serialize it? If not, how can we access the 'BOOST_CLASS_VERSION' in a serialization member function? I'm looking to do something like this: (this code is just written now so probably is incorrect but hopefully gives the idea). How do we check 'version_of_T' below which should correspond to the BOOST_CLASS_VERSION for T? I'd probably have this only check if the ArchiveT::is_loading::value is true as serializing doesn't matter. The issue at the moment is that an access violation is being thrown which definitely isn't a good idea. I'd like a 'newer object version' exception thrown instead which would enable us to give more useful error information to the user or our error log. Thanks Russell namespace serialization { template <typename T> void check_version(T* Object, unsigned int version)) { if (version_of_T > version) { throw newer_version_exception(); } } } class test { template <typename ArciveT> void serialize(ArchiveT& ar, unsigned int version) { serialization::check_version(this, version); } }; BOOST_CLASS_VERSION(test, 0x00);