
Hmm - it would be wrong if DataPtr was the base class part of derived class pointer. Perhaps the warning is over-zealous - would have to think about this. Robert Ramey gast128 wrote:
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
#include #include #include 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) );