|
Boost Users : |
Subject: [Boost-users] Boost Serialization warning
From: Sulakshan Vajipayajula (sulaxan_at_[hidden])
Date: 2010-05-06 18:21:59
Hello,
I am encountering the following warning when using virtual base class
pointer to serialize a derived class. The same warning is displayed for
all sample test programs that come with the serialization library. The
compiler used is g++ version 3.4.3.
/vob/adc/router/thirdparty/boost/boost/type_traits/is_virtual_base_of.hp
p:56: warning: direct base `TestBase' inaccessible in
`boost::detail::is_virtual_base_of_impl<TestBase, TestType1,
mpl_::bool_< true> >::X' due to ambiguity
Can you recommend any workarounds...or if this has been addressed.
Thanks
Sulakshan V
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/serialization/type_info_implementation.hpp>
#include <boost/serialization/export.hpp>
#include <boost/serialization/extended_type_info_no_rtti.hpp>
#include <boost/archive/archive_exception.hpp>
#include <boost/archive/basic_xml_archive.hpp>
#include <fstream>
class TestBase
{
public:
TestBase() : m_baseInt(111) {}
virtual ~TestBase() {}
virtual const char* get_key() const = 0;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, const unsigned int)
{
ar & boost::serialization::make_nvp("BaseInt",
m_baseInt);
}
int m_baseInt;
};
BOOST_SERIALIZATION_ASSUME_ABSTRACT(TestBase)
BOOST_CLASS_TYPE_INFO(TestBase, extended_type_info_no_rtti<TestBase>)
BOOST_CLASS_EXPORT(TestBase)
class TestType1 : public TestBase
{
public:
TestType1() : m_int(666), m_float(777.f) {}
virtual const char* get_key() const;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & boost::serialization::make_nvp("TestBase",
boost::serialization::base_object<TestBase>(*this));
ar & boost::serialization::make_nvp("Type1Int", m_int);
ar & boost::serialization::make_nvp("Type1Float",
m_float);
}
int m_int;
float m_float;
};
BOOST_CLASS_TYPE_INFO(TestType1, extended_type_info_no_rtti<TestType1>)
BOOST_CLASS_EXPORT(TestType1)
const char* TestType1::get_key() const
{
return
boost::serialization::type_info_implementation<TestType1>::type::get_con
st_instance().get_key();
}
class TestType2 : public TestBase
{
public:
TestType2() : m_int(222), m_float(333.f) {}
virtual const char* get_key() const;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & boost::serialization::make_nvp("TestBase",
boost::serialization::base_object<TestBase>(*this));
ar & boost::serialization::make_nvp("Type2Int", m_int);
ar & boost::serialization::make_nvp("Type2Float",
m_float);
}
int m_int;
float m_float;
};
BOOST_CLASS_TYPE_INFO(TestType2, extended_type_info_no_rtti<TestType2>)
BOOST_CLASS_EXPORT(TestType2)
const char* TestType2::get_key() const
{
return
boost::serialization::type_info_implementation<TestType2>::type::get_con
st_instance().get_key();
}
int main(int argc, char** argv[])
{
//Create new file
std::ofstream testTypeOFS("TestType.xml");
boost::archive::xml_oarchive testOutXML(testTypeOFS);
TestType1* pT1 = new TestType1;
TestType2* pT2 = new TestType2;
testOutXML << boost::serialization::make_nvp("TestType1", pT1);
testOutXML << boost::serialization::make_nvp("TestType2", pT2);
testTypeOFS.close();
delete pT1;
delete pT2;
//Load the file back in to extract a derived type.
std::ifstream testTypeIFS("TestType.xml");
boost::archive::xml_iarchive testInXML(testTypeIFS);
TestBase* pTB = NULL;
try
{
testInXML >> boost::serialization::make_nvp("TestBase",
pTB);
}
catch(boost::archive::archive_exception& ex)
{
std::cout << "Archive Exception: " << ex.code << "-" <<
ex.what() << std::endl;
char exitNotice;
std::cin >> exitNotice;
}
testTypeIFS.close();
return 0;
}
/vob/adc/router/thirdparty/boost/boost/type_traits/is_virtual_base_of.hp
p:56: warning: direct base `TestBase' inaccessible in
`boost::detail::is_virtual_base_of_impl<TestBase, TestType2,
mpl_::bool_< true> >::X' due to ambiguity
/vob/adc/router/thirdparty/boost/boost/type_traits/is_virtual_base_of.hp
p: In instantiation of `boost::detail::is_virtual_base_of_impl<TestBase,
TestType1, mpl_::bool_< true> >::X':
/vob/adc/router/thirdparty/boost/boost/type_traits/is_virtual_base_of.hp
p:70: instantiated from
`boost::detail::is_virtual_base_of_impl<TestBase, TestType1,
mpl_::bool_< true> >'
/vob/adc/router/thirdparty/boost/boost/type_traits/is_virtual_base_of.hp
p:78: instantiated from
`boost::detail::is_virtual_base_of_impl2<TestBase, TestType1>'
/vob/adc/router/thirdparty/boost/boost/type_traits/is_virtual_base_of.hp
p:87: instantiated from `boost::is_virtual_base_of<TestBase,
TestType1>'
/vob/adc/router/thirdparty/boost/boost/mpl/if.hpp:67: instantiated
from `boost::mpl::if_<boost::is_virtual_base_of<TestBase, TestType1>,
boost::mpl::identity<boost::serialization::void_cast_detail::void_caster
_virtual_base<TestType1, TestBase> >,
boost::mpl::identity<boost::serialization::void_cast_detail::void_caster
_primitive<TestType1, TestBase> > >'
/vob/adc/router/thirdparty/boost/boost/mpl/eval_if.hpp:37:
instantiated from
`boost::mpl::eval_if<boost::is_virtual_base_of<TestBase, TestType1>,
boost::mpl::identity<boost::serialization::void_cast_detail::void_caster
_virtual_base<TestType1, TestBase> >,
boost::mpl::identity<boost::serialization::void_cast_detail::void_caster
_primitive<TestType1, TestBase> > >'
/vob/adc/router/thirdparty/boost/boost/serialization/void_cast.hpp:271:
instantiated from `const
boost::serialization::void_cast_detail::void_caster&
boost::serialization::void_cast_register(const Derived*, const Base*)
[with Derived = TestType1, Base = TestBase]'
/vob/adc/router/thirdparty/boost/boost/serialization/base_object.hpp:68:
instantiated from `static const void*
boost::serialization::detail::base_register<Base,
Derived>::polymorphic::invoke() [with Base = TestBase, Derived =
TestType1]'
/vob/adc/router/thirdparty/boost/boost/serialization/base_object.hpp:82:
instantiated from `static const void*
boost::serialization::detail::base_register<Base, Derived>::invoke()
[with Base = TestBase, Derived = TestType1]'
/vob/adc/router/thirdparty/boost/boost/serialization/base_object.hpp:104
: instantiated from `typename
boost::serialization::detail::base_cast<B, D>::type&
boost::serialization::base_object(Derived&) [with Base = TestBase,
Derived = TestType1]'
x.cpp:48: instantiated from `void TestType1::serialize(Archive&,
unsigned int) [with Archive = boost::archive::xml_iarchive]'
/vob/adc/router/thirdparty/boost/boost/serialization/access.hpp:118:
instantiated from `static void
boost::serialization::access::serialize(Archive&, T&, unsigned int)
[with Archive = boost::archive::xml_iarchive, T = TestType1]'
/vob/adc/router/thirdparty/boost/boost/serialization/serialization.hpp:7
4: instantiated from `void boost::serialization::serialize(Archive&,
T&, unsigned int) [with Archive = boost::archive::xml_iarchive, T =
TestType1]'
/vob/adc/router/thirdparty/boost/boost/serialization/serialization.hpp:1
33: instantiated from `void
boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with
Archive = boost::archive::xml_iarchive, T = TestType1]'
/vob/adc/router/thirdparty/boost/boost/archive/detail/iserializer.hpp:18
2: instantiated from `void
boost::archive::detail::iserializer<Archive,
T>::load_object_data(boost::archive::detail::basic_iarchive&, void*,
unsigned int) const [with Archive = boost::archive::xml_iarchive, T =
TestType1]'
x.cpp:93: instantiated from here
/vob/adc/router/thirdparty/boost/boost/type_traits/is_virtual_base_of.hp
p:56: warning: direct base `TestBase' inaccessible in
`boost::detail::is_virtual_base_of_impl<TestBase, TestType1,
mpl_::bool_< true> >::X' due to ambiguity
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