I compiled the following program on my system
#include <fstream>
#include
#include
int main() {
std::ofstream ofs("archive");
boost::archive::text_oarchive oa(ofs);
const boost::shared_ptr<int> i;
oa << i;
return 0;
}
The first syntax error I got was:
test_zmisc.cpp
c:\BoostMainCVS\libs\serialization\vc7ide\..\..\..\boost\serialization\shared_ptr.hpp(231)
: error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE<x>'
...
In my vc 7.1 system I double click on this error and I am displayed the
following source line from
boost/serialization/shared_ptr.hpp
// correct shared_ptr serialization depends upon object tracking
// being used.
BOOST_STATIC_ASSERT(
boost::serialization::tracking_level<T>::value
!= boost::serialization::track_never
);
....
This indicates the the serialization of shared_ptr<T> is only implemented if
T is a tracked type.
So if you want to do this, there are a couple of options
a) alter shared_ptr<T> to handle untracked types. This is probably not a
great ideas
as usually untracked types are untracked for a good reason. There are other
reasons
as well but we needn't go into them here.
b) use BOOST_STRONG_TYPE to make an integer type that is tracked. This is
what
I recommend as its an unusual case an altering shared pointer serialization
would be
a pain in the neck and could easily have unexpected side-effects by
implementing
tracking as a global side-effect for types which otherwise would expeced to
be
untracked (like int)
So, using b) Your program looks like:
#include <fstream>
#include
#include
#include
// defined a "special kind of integer"
BOOST_STRONG_TYPEDEF(int, tracked_int)
// define serialization for a tracked int
template<class Archive>
void serialize(Archive &ar, tracked_int & ti, const unsigned int version){
// serialize the underlying int
ar & static_cast(ti);
}
int main() {
std::ofstream ofs("archive");
boost::archive::text_oarchive oa(ofs);
const boost::shared_ptr i;
oa << i;
return 0;
}
This program does in fact compile on my vc 7.1 system.
I hope that answers your question.
Good Luck
Robert Ramey
Joseph Turian wrote:
Try the following change - If this does it - read the rationale
about using const with serialization.
Unfortunately this doesn't change the compiler errors output at all.
Can you duplicate this bad behavior on your system?
Joseph