Okay so basically :
i have this simple example:
main.cpp
using namespace VHGO::Resource; std::list<BaseTable*> tableList; BigTable* bt1 = new BigTable(); HRESULT hr = S_OK; hr = bt1->Add(L"TEXTURE", L"..\\Data\\ground.png"); tableList.push_back(bt1); std::wofstream ofs3(L"VHGOSatData.bif"); boost::archive::xml_woarchive outArch3(ofs3); outArch3 & BOOST_SERIALIZATION_NVP(tableList); And my serialization classes
namespace VHGO { typedef std::wstring String; typedef std::map<VHGO::String, VHGO::String> PropertyMap; namespace Resource { class BaseTable { friend class boost::serialization::access; friend std::wostream& operator<<(std::wostream& os, const BaseTable& b ); private: template<class Archive> void save(Archive& ar, const unsigned int version) const {} template<class Archive> void load(Archive& ar, const unsigned int version) {} public: BaseTable() { } //for boost virtual ~BaseTable() { } virtual HRESULT Add(__in const VHGO::String&, __in const VHGO::String&) = 0; virtual HRESULT Remove(__in const VHGO::String&) = 0; virtual HRESULT Get(__in const VHGO::String&, __out VHGO::String&) = 0; }; std::wostream& operator<<(std::wostream& os, const BaseTable& b ) { UNREFERENCED_PARAMETER(b); return os; } ////////////////////////////////////////////////////////////////////////////////////////// class BigTable : public BaseTable { friend class boost::serialization::access; private: VHGO::PropertyMap m_Values; template<class Archive> void serialize(Archive& ar, const unsigned int version) { boost::serialization::split_member(ar, *this, version); } template<class Archive> void save(Archive& ar, const unsigned int version) const { UNREFERENCED_PARAMETER(version); ar << boost::serialization::base_object<const VHGO::Resource::BaseTable>(*this); ar << boost::serialization::make_nvp("bigtable", m_Values); } template<class Archive> void load(Archive& ar, const unsigned int version) { UNREFERENCED_PARAMETER(version); ar >> boost::serialization::base_object<BaseTable>(*this); ar >> boost::serialization::make_nvp("bigtable", m_Values); } // BOOST_SERIALIZATION_SPLIT_MEMBER() public: BigTable(__in const VHGO::PropertyMap& propMap) : m_Values(propMap) { } BigTable() { } virtual ~BigTable() { } HRESULT Add(__in const VHGO::String& propKey, __in const VHGO::String& propValue) { //itadds return S_OK; } HRESULT Remove(__in const VHGO::String& propKey) { /*insertchecking*/ return S_OK; } HRESULT Get(__in const VHGO::String& key, __out VHGO::String& aValue) { aValue = m_Values[key]; return S_OK; } VHGO::PropertyMap GetPropertyMap() { return m_Values; } }; What is the cause of this, ive gone through the documents, and i can make boost's examples work fine. But i cannot make this work. Ive searched around, several times and found mixed results. But i am pretty much in the dark,.
The compile error is this:
Error 1 error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from 'boost::mpl::failed ************boost::serialization::is_wrapper<T>::* ***********' to 'boost::mpl::assert<false>::type' im using VC9.0, and using boost 1.41.
Does anyone have any ideas?
EDIT
Added the wrapper as suggested
namespace boost { namespace serialization { template<> struct is_wrapper : mpl::true_ {}; } // namespace serialization } // namespace boost
Still leads to the following error
1>d:\wrkspace\Sources\External\boost\boost/archive/basic_xml_oarchive.hpp(87) : error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from 'boost::mpl::failed ************boost::serialization::is_wrapper<T>::* ***********' to 'boost::mpl::assert<false>::type' 1> with 1> [ 1> T=const std::list<VHGO::Resource::BaseTable *> 1> ] 1> No constructor could take the source type, or constructor overload resolution was ambiguous 1> d:\wrkspace\Sources\External\boost\boost/archive/detail/interface_oarchive.hpp(64) : see reference to function template instantiation 'void boost::archive::basic_xml_oarchive<Archive>::save_override<T>(T &,int)' being compiled 1> with 1> [ 1> Archive=boost::archive::xml_woarchive, 1> T=std::list<VHGO::Resource::BaseTable *> 1> ] EDIT 2
I caved and tried this on gcc, and it works fine. Sadily, i absolutely need it to work on VS2008 which is the standard at work.