Boost logo

Boost Users :

Subject: [Boost-users] [serialization] broken in 1.36
From: gast128 (gast128_at_[hidden])
Date: 2008-09-12 07:02:26


Dear all,

yesterday we upgraded to vstudio 2008 and Boost 1.36. However it seems that
the serialization library gives a STATIC_WARNING now. the code uses a
shared_ptr of a data structure which has no virtual function. This was ok in
Boost 1.34 and I don't see why this should be wrong:

#include "stdafx.h"
#include <sstream>
#include <boost\shared_ptr.hpp>
#include <boost\serialization\shared_ptr.hpp>
#include <boost\serialization\nvp.hpp>
#include <boost\archive\xml_iarchive.hpp>

struct Data
{
    std::string m_str;
};

template <class Archive>
void serialize(Archive& ar, Data& r, const unsigned int /*version*/)
{
   ar & BOOST_SERIALIZATION_NVP(r.m_str);
}

struct DataStorage
{
    template <class Archive>
    void serialize(Archive& ar, const unsigned int /*version*/)
    {
        ar & BOOST_SERIALIZATION_NVP(m_ptrBla);
    }

private: //data
    typedef boost::shared_ptr<Data> DataPtr;
    
    DataPtr m_ptrBla;
};

int _tmain()
{
    DataStorage data;
    std::stringstream sstr;

    //boost::archive::xml_oarchive oa(sstr);
    //oa << boost::serialization::make_nvp("bla", data);

    boost::archive::xml_iarchive ia(sstr);
    ia >> boost::serialization::make_nvp("bla", data);

    return 0;
}

It gives warning c4099 where '<---':

const extended_type_info *
    get_derived_extended_type_info(const T & t) const {
        // note: this implementation - based on usage of typeid (rtti)
        // only does something if the class has at least one virtual function.
        BOOST_STATIC_WARNING(boost::is_polymorphic<T>::value); //<---
        return
            detail::extended_type_info_typeid_0::get_extended_type_info(
                typeid(t)
            );


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net