[serialization] Deserialization of a float whose value is infinite throws an archive_exception ("stream error")

Hello, using the Boost.Serialization library version 1.43, I saved to an XML archive a float number which has a value of infinite; then loading that XML file leads to a boost::archive::archive_exception, exception.what() return "stream error". The source code to reproduce the problem is the following: #include <boost/serialization/serialization.hpp> #include <sstream> #include <boost/archive/xml_woarchive.hpp> #include <boost/archive/xml_wiarchive.hpp> #include <iostream> struct XXX { friend class boost::serialization::access; template<class Archive> void serialize(Archive & ar, const unsigned int version) { ar & BOOST_SERIALIZATION_NVP(mValue); } float mValue; };//struct int main() { std::wstringstream lSS; boost::archive::xml_woarchive oa(lSS); XXX xxx; float zero = 0.f; xxx.mValue = 1 / zero; oa << BOOST_SERIALIZATION_NVP(xxx); std::wcout<<"saved:"<<lSS.str() << std::endl; boost::archive::xml_wiarchive ia(lSS); ia >> BOOST_SERIALIZATION_NVP(xxx); std::wcout<<"loaded:"<<lSS.str() << std::endl; return 0; } Using gcc 4.4.4 on Linux/Debian the mValue member is saved as: <mValue>inf</mValue> while on Visual Studio 2005 on Windows XP sp2 the mValue member is saved as: <mValue>1.#INF</mValue> I see that the value of infinite has a different representation, (and this could be the main motivation behind the choice to not support them), but this lead to a situation in which a properly saved archive is not loadable by the library itself. As far I can see, the issue is at this line 209 of \libs\serialization\src\basic_xml_grammar.ipp parse_info<BOOST_DEDUCED_TYPENAME std::basic_string<CharType>::iterator> result = boost::spirit::parse(arg.begin(), arg.end(), rule_); return result.hit; where the parse function fails since result.hit is equal to false. I resolved the issue by checking all the data preventing accurately any infinite value before it is saved to an xml archive, but I wonder if this problem belongs to the library itself or not. Greetings, Luca

Luca wrote:
I resolved the issue by checking all the data preventing accurately any infinite value before it is saved to an xml archive, but I wonder if this problem belongs to the library itself or not.
This is a result of the fact that the serialization library text and xml are built upon text streams. an input stream can't read back a Nan which an output stream has written. Robert Ramey
Greetings, Luca
participants (2)
-
Luca
-
Robert Ramey