Hi, I am having difficulties in using boost serialization under ** Windows Vista 64bit **. My boost libraries are built in 64bit. (I have attached the test program below) It seems that boost serialization is not able to serialize uint64_t with maximum value or anything larger then "14757395258967641292", as shown in main() " check_serialization( test64t, "boost::uint64_t" );" Also, If I use multiple inheritance, like below, "YYConfig" and " typedef YYConfig<FakeC, FakeB> MyConfig;" and trying to serialize "MyConfig" , stream error can occurr. Thank you very much for your help. Best Regards, Joseph Here is my output =========== uint32_t ================ succeeded =========== boost::uint64_t ================ failed Input : 18446744073709551615 Output : 14757395258967641292 The following will throw exception : stream error //serialize_and_deserialize( cfg ); Press any key to continue . . . Test Code ===================================================================================== #include<iostream> #include<boost/cstdint.hpp> #include<boost/archive/text_oarchive.hpp> #include<boost/archive/text_iarchive.hpp> #include<sstream> #include<cstdlib> using namespace std; template< class T1, class T2> struct YYConfig : public T1 , public T2 { public: friend class boost::serialization::access; template<class Archive> void serialize(Archive& ar, const unsigned int version) { ar& boost::serialization::base_object< T1> (*this); ar& boost::serialization::base_object< T2> (*this); } }; class FakeB { public: int x; FakeB(): x(0){} friend class boost::serialization::access; template<class Archive> void serialize(Archive& ar, const unsigned int version) { ar& x; } }; class FakeC { public: boost::uint64_t targetNumSamples; friend class boost::serialization::access; FakeC() : targetNumSamples( std::numeric_limits< boost::uint64_t>::max() ){} template<class Archive> void serialize(Archive& ar, const unsigned int version) { ar& targetNumSamples; } }; // ======================= Testing ================================/ template<typename T> T serialize_and_deserialize( T typeValue1 ) { T typeValue2; // Set std::string content; std::ostringstream oss; { boost::archive::text_oarchive oa(oss); oa<< typeValue1; content = oss.str(); } // Extract std::istringstream iss( content ); { boost::archive::text_iarchive ia( iss ); ia>> typeValue2; } return typeValue2; } template<typename T> bool check_serialization( T typeValue1, std::string testName ) { T typeValue2 = serialize_and_deserialize( typeValue1 ); std::cout<< std::endl<< "=========== "<< testName<< " ================"; if( typeValue1 == typeValue2 ){ std::cout<< std::endl<< "succeeded "; return true; } else{ std::cout<< std::endl<< "failed "; std::cout<< std::endl<< "Input : "<< typeValue1; std::cout<< std::endl<< "Output : "<< typeValue2; std::cout<< std::endl; return false; } } typedef YYConfig<FakeC, FakeB> MyConfig; int main(int argc, char** argv ) { boost::uint32_t test32t = std::numeric_limits< boost::uint32_t>::max(); boost::uint64_t test64t = std::numeric_limits< boost::uint64_t>::max(); check_serialization( test32t, "uint32_t" ); check_serialization( test64t, "boost::uint64_t" ); std::cout<< std::endl<< "The following will throw exception : stream error"<< std::endl ; system("pause"); MyConfig cfg; serialize_and_deserialize( cfg ); return 0; }