#include <sstream>
#include <boost/config.hpp>
#include <boost/serialization/static_warning.hpp>
#include <boost/serialization/tracking.hpp>
#include <boost/serialization/level.hpp>
#include <boost/serialization/version.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
struct check1 {
template<class Archive>
void serialize(Archive & ar, const unsigned int version);
check1(){}
};
BOOST_CLASS_IMPLEMENTATION(check1, boost::serialization::object_serializable)
BOOST_CLASS_TRACKING(check1, boost::serialization::track_selectively)
struct check2 {
template<class Archive>
void serialize(Archive & ar, const unsigned int version);
check2(){}
};
BOOST_CLASS_IMPLEMENTATION(check2, boost::serialization::object_serializable)
BOOST_CLASS_VERSION(check2, 1)
BOOST_CLASS_TRACKING(check2, boost::serialization::track_always)
struct check3 {
template<class Archive>
void serialize(Archive & ar, const unsigned int version);
check3(){}
};
BOOST_CLASS_TRACKING(check3, boost::serialization::track_never)
template<class T>
int f(){
BOOST_STATIC_WARNING(T::value);
BOOST_STATIC_ASSERT(T::value);
return 0;
}
int main(int , char * []){
std::stringstream s;
{
boost::archive::text_oarchive oa(s);
check1 const c1_out;
oa << c1_out;
check1 c1_non_const_out;
oa << c1_non_const_out;
check1 * const c1_ptr_out = 0;
oa << c1_ptr_out;
check2 const * c2_ptr_out;
oa << c2_ptr_out;
check3 * const c3_ptr_out = 0;
oa << c3_ptr_out;
check2 const c2_out;
oa << c2_out; }
{
boost::archive::text_iarchive ia(s);
check1 const c1_in;
ia >> c1_in;
check1 * c1_ptr_in = 0;
ia >> c1_ptr_in;
check2 * c2_ptr_in;
ia >> c2_ptr_in;
check3 * c3_ptr_in = 0;
ia >> c3_ptr_in;
check2 c2_in;
ia >> c2_in; }
{
boost::archive::text_oarchive oa(s);
check1 const c1_out;
oa << BOOST_SERIALIZATION_NVP(c1_out);
check1 c1_non_const_out;
oa << BOOST_SERIALIZATION_NVP(c1_non_const_out);
check1 * const c1_ptr_out = 0;
oa << BOOST_SERIALIZATION_NVP(c1_ptr_out);
check2 const * c2_ptr_out;
oa << BOOST_SERIALIZATION_NVP(c2_ptr_out);
check3 * const c3_ptr_out = 0;
oa << BOOST_SERIALIZATION_NVP(c3_ptr_out);
check2 const c2_out;
oa << BOOST_SERIALIZATION_NVP(c2_out); }
{
boost::archive::text_iarchive ia(s);
check1 const c1_in;
ia >> BOOST_SERIALIZATION_NVP(c1_in);
check1 * c1_ptr_in = 0;
ia >> BOOST_SERIALIZATION_NVP(c1_ptr_in);
check2 * c2_ptr_in;
ia >> BOOST_SERIALIZATION_NVP(c2_ptr_in);
check3 * c3_ptr_in = 0;
ia >> BOOST_SERIALIZATION_NVP(c3_ptr_in);
check2 c2_in;
ia >> BOOST_SERIALIZATION_NVP(c2_in); }
return 0;
}