Political Confusion wrote:
--- On Tue, 5/18/10, Robert Ramey
wrote: From: Robert Ramey
Subject: Re: [Boost-users] Serialization: C4308 warning with MSVC9 To: boost-users@lists.boost.org Date: Tuesday, May 18, 2010, 10:35 PM Political Confusion wrote: Political Confusion
writes: I'm using Boost 1.43 with MSVC9 SP1 and Windows
SDK v7 on Windows 7.
I've created a class like the "A Very Simple Case" example (i.e. added 'access' as friend and a templated serialize function). In serialize, I just archive 10 ints (signed and unsigned). It compiles fine, but when I add program code to save my class to a text_oarchive, I get a warning:
c:\third-party\boost_1_43_0\boost\mpl\print.hpp(51) : warning C4308:
negative integral constant converted to unsigned type
Line 51 of print.hpp is: enum { n = sizeof(T) + -1 };
Calling sizeof() on my class gives a 44. I do not get any warning when I load my class with text_iarchive. And both save and load appear to work fine.
I had to add the following to make this warning go away:
BOOST_CLASS_TRACKING( my_class, boost::serialization::track_never )
This warning should precede a long call chain. If you go to the the call BEFORE this, you should find a comment which indicates why this warning is invoked.
Robert Ramey
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
Hello Robert,
That's what I did. The lines above the warning (boost/archive/detail/check.hpp(98)):
// saving an non-const object of a type not marked "track_never)
// may be an indicator of an error usage of the // serialization library and should be double checked. // See documentation on object tracking. Also, see the // "rationale" section of the documenation // for motivation for this checking.
BOOST_STATIC_WARNING(typex::value);
So I added the BOOST_CLASS_TRACKING() line. I get the same warning if I modify save_schedule() in demo.cpp to instantiate a gps_position and save it to oa. gps_position was the example I used for my class.
Thanks for the reply and thanks for your work.
But this begs the real question. Do you want tracking or don't you. Without tracking - you won't be able to serialize apointer. and you'll missing the opptimization of space if the same object is serialized more than once. It will be faster to save and restore With tracking The opposite will be true So the decision to use tracking shouldn't made as to the easiest way to fix the warning. The other way is to make the object we're saving non-const. Robert Ramey