Hi! I cannot figure out how to make some class behave like a primitive and let boost::serialization rely on ostream/istream operators for xml input. This makes sense to me for e.g. String representations other than std::string. It seems it does not suffice to define the iostream operators. As an example here is my try to get things right for an MFC/ATL CString: std::istream & operator>>(std::istream &is, CString & S) { std::string s; is >> s; S = s.c_str(); return is; } #ifndef BOOST_NO_STD_WSTREAMBUF std::wistream & operator>>(std::wistream &is, CString & S) { std::wstring s; is >> s; S = s.c_str(); return is; } #endif BOOST_CLASS_IMPLEMENTATION(CString, boost::serialization::primitive_type) Output works fine due to automatic conversion of CString to char* but input fails. Debugging shows the end tag is "eaten" and appended to the value. This means that in struct C { CString SomeString; }; template<class Archive> inline void serialize(Archive & ar, C & c, const unsigned int version) { using boost::serialization::make_nvp; ar & make_nvp("SomeTag", c.SomeString); }; C c; c.SomeString = Test; reading the archive yields SomeString == "Test</SomeTag>" and an exception ("stream error") is thrown by basic_xml_archive. Any hint how to get things fixed here? This would be nice in cases a string represenation is already defined. Or should I work around this with binary_object? And how? regards, Markus