Hey, thanks for the reply.
The problem is that the code doen't compile,
not about runtime.
However, I have identified the problem - the code
below doesn't compile with /Za (With laguage extensions disbaled)
The code
traps in boost\archive\detail\oserializer.hpp line 538:
template<class Archive, class T>
inline void save(Archive
& ar, T &t){
// if your program traps here, it indicates that your doing one of
the following:
// a) serializing an object of a type marked "track_never"
through a pointer.
// b) saving an non-const object of a type not markd
"track_never)
// Either of these conditions 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(check_tracking<T>::value);
save(ar,
const_cast<const T &>(t));
}
When compiling with language extensions
enabled the code compiles fine.
This remains a question, why does this code
require non standard extension?
This might an issue for a developer
that wants to write more or less portable code.
Suggestion anyone?
Greg
It might be help to indicate the error and which
line tripped it.
In the meantime
a) binary streams should be opened with
ios::binary
b) I don't remember what std::cout is derived
from. Try stringstream or fstream
Robert Ramey
Hello all,
I'm using boost 1.37 on msvc 9.
I have a
compilation problem when serializing to a text_oarchive.
The problem
doesn't happen when serializing to a binary_oarchive. here's a sample
code:
#include <boost/test/unit_test.hpp>
#include
<boost/serialization/serialization.hpp>
#include
<boost/archive/text_oarchive.hpp>
#include
<boost/archive/binary_oarchive.hpp>
#include
<boost/serialization/tracking.hpp>
struct
SerializableStruct
{
int m_data;
};
namespace
boost
{
namespace serialization
{
template<class
Archive>
void serialize(Archive &
ar, SerializableStruct & s, unsigned int
)
{
ar &
s.m_data;
}
}
}
BOOST_CLASS_TRACKING(SerializableStruct,boost::serialization::track_never);
BOOST_AUTO_TEST_SUITE(TestGeneralSerialize)
BOOST_AUTO_TEST_CASE(TestTextArchive)
{
boost::archive::text_oarchive out(std::cout);
SerializableStruct s;
s.m_data = 10;
out
<<
s;
}
BOOST_AUTO_TEST_CASE(TestBinaryArchive)
{
std::stringstream str;
boost::archive::binary_oarchive
out(str);
SerializableStruct s;
s.m_data =
10;
out <<
s;
}
BOOST_AUTO_TEST_SUITE_END();
By the way,
the
following code compiles fine under boost 1.35 and fails to compile under
boost 1.36, 1.37.
Comment out the TestTextArchive and the code compiles
fine.
Any help will be appreciated.
Greg
_______________________________________________
Boost-users
mailing
list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users
_______________________________________________
Boost-users mailing
list
Boost-users@lists.boost.org
http://lists.boost.org/mailman/listinfo.cgi/boost-users