Hi, I have an application that uses serialization for data storage/retrieval, based on Boost 1.67.0. I've implemented class versioning as per: https://www.boost.org/doc/libs/1_67_0/libs/serialization/doc/tutorial.html#v ersioning The overall archive stores a number of sub-classes, nested within the XML. However, I get a run-time exception thrown that I can't catch when one of my sub-classes (DisplayDefinition) returns from being read in. A bit of debugging found that the problem was caused by the class version number having a value of 0, whilst the file being read had a version number of 3 for the class in question. Here's the bit of the class responsible for the archiving: class DisplayDefinition: public MessageDefinition { ... private: friend std::ostream & operator<<(std::ostream &os, const DisplayDefinition &DD); friend std::istream & operator>>(std::istream &is, const DisplayDefinition &DD); friend class boost::serialization::access; template<class Archive> void serialize(Archive & myArchive, const unsigned int version) { try { const char * cLabelTag = "Label"; myArchive & boost::serialization::make_nvp( cLabelTag, wstrLabel); const char * cAddressBytesTag = "SysExAddressBytes"; myArchive & boost::serialization::make_nvp( cAddressBytesTag, vSysExAddressBytes); const char * cActionsTag = "Actions"; myArchive & boost::serialization::make_nvp( cActionsTag, myActions); const char * cStatesTag = "StateNames"; myArchive & boost::serialization::make_nvp( cStatesTag, StateLabels); const char * cLineCountTag = "LineCount"; myArchive & boost::serialization::make_nvp( cLineCountTag, nDisplayLineCount); const char * cLineLengthTag = "LineLength"; myArchive & boost::serialization::make_nvp( cLineLengthTag, nDisplayLength); const char * cStripCountTag = "StripCount"; myArchive & boost::serialization::make_nvp( cStripCountTag, nStripCount); const char * cIsLEDLampTag = "LEDLamp"; myArchive & boost::serialization::make_nvp( cIsLEDLampTag, blnIsLEDLamp); const char * cTranslationTag = "TranslationID"; myArchive & boost::serialization::make_nvp( cTranslationTag, strTranslationID); const char * cCursorOffsetTag = "CursorOffset"; myArchive & boost::serialization::make_nvp( cCursorOffsetTag, nCursorOffset); if(version > 0) { const char * cCursorFromLeftTag = "CursorFromLeft"; myArchive & boost::serialization::make_nvp( cCursorFromLeftTag, blnCursorFromLeft); } if(version > 1) { const char * cUniCodeTag = "Unicode"; myArchive & boost::serialization::make_nvp( cUniCodeTag, blnIsUniCode); } if(version > 2) { const char * cLinkedHashTag = "LinkedTo"; myArchive & boost::serialization::make_nvp( cLinkedHashTag, strLinkedDisplayHash); } } // end try catch (...) { throw ID_LOAD_DATA_EXCEPTION; } // end catch } ... }; // end of class definition BOOST_CLASS_VERSION(DisplayDefinition, 3); I'm clueless as to why the BOOST_CLASS_VERSION macro doesn't seem to be setting the version number correctly. Can anybody advise me, please? Best wishes. Tim Burgess Raised Bar Ltd. E: mailto:tim@raisedbar.net tim@raisedbar.net M: +44 (0)7989 486976