
Hi all, boost:1.4.0 compiler: vs 2005 code: #define Data_Io_Load_Save(class_name, members) \ friend class boost::serialization::access; \ template<class Archive> \ void serialize(Archive & ar, const unsigned int version) \ { ar members; } #define Data_Io_Load_Save_Base(base_class) BOOST_SERIALIZATION_BASE_OBJECT_NVP(base_class) #define Auto_Value_Decl(type) BOOST_SERIALIZATION_NVP(type) struct TestStruct { int type; int ina[10]; std::map<std::string, std::string> mapstr; Data_Io_Load_Save(TestStruct, &Auto_Value_Decl(type) &Auto_Value_Decl(ina) &Auto_Value_Decl(mapstr) ); }; void TestSerial() { TestStruct ts, its; ts.type = 2222; ts. mapstr ["str1"] = "str1"; ts. mapstr ["str2"] = "str2"; ts. mapstr ["str3"] = "str3"; ts. mapstr ["str4"] = "str4"; // save std::ofstream ofs("proto.txt"); boost::archive::xml_oarchive oa(ofs); oa << Auto_Value_Decl(ts. mapstr); // oa << Auto_Value_Decl(ts); // ofs.close(); //load std::ifstream ifs("proto.txt"); boost::archive::xml_iarchive ia(ifs); ts.mapint.clear(); ia & Auto_Value_Decl(ts. mapstr); // error ia & Auto_Value_Decl(its); // error ifs.close(); } because loading " std::map<std::string, std::string> mapstr;", the compiler stop at stack_constructor.hpp:64, the line is " this->address()->~T(); " so, I changed "stack_constructor.hpp" template<typename T > struct stack_allocate { T * address() { return static_cast<T*>(&storage_/*.address()*/); } T & reference() { return * address(); } private: //typedef BOOST_DEDUCED_TYPENAME boost::aligned_storage< // sizeof(T), // #if BOOST_WORKAROUND(__BORLANDC__,BOOST_TESTED_AT(0x560)) // 8 // #else // boost::alignment_of<T>::value // #endif //> type; T storage_; }; // construct element on the stack template<class Archive, class T> struct stack_construct : public stack_allocate<T> { stack_construct(Archive & ar, const unsigned int version){ //// note borland emits a no-op without the explicit namespace //boost::serialization::load_construct_data_adl( // ar, // this->address(), // version //); } ~stack_construct(){ //this->address()->~T(); // undo load_construct_data above } }; then, all be ok. Regards. Simon Cheung.