title: Boost Serialization Compile Errors, terribly confused
body: <p>Okay so basically :</p>
  
  <p>i have this simple example:</p>
  
  <p>main.cpp</p>
  
  <pre><code>using namespace VHGO::Resource;
  
  std::list&lt;BaseTable*&gt; tableList;
  
  BigTable* bt1 = new BigTable();
  HRESULT hr = S_OK;
  hr = bt1-&gt;Add(L"TEXTURE", L"..\\Data\\ground.png");
  tableList.push_back(bt1);
  
  std::wofstream ofs3(L"VHGOSatData.bif");
  boost::archive::xml_woarchive outArch3(ofs3);
  outArch3 &amp; BOOST_SERIALIZATION_NVP(tableList);
  </code></pre>
  
  <p>And my serialization classes</p>
  
  <pre><code>namespace VHGO
  {
   typedef std::wstring String;
   typedef std::map&lt;VHGO::String, VHGO::String&gt; PropertyMap;
      namespace Resource
      {
          class BaseTable
          {
              friend class boost::serialization::access;
              friend std::wostream&amp; operator&lt;&lt;(std::wostream&amp; os, const BaseTable&amp; b );
          private:
              template&lt;class Archive&gt;
              void save(Archive&amp; ar, const unsigned int version) const {}
  
              template&lt;class Archive&gt;
              void load(Archive&amp; ar, const unsigned int version) {}
          public:
              BaseTable()
              {
              }
              //for boost
              virtual ~BaseTable()
              {
              }
  
              virtual HRESULT Add(__in const VHGO::String&amp;, __in const VHGO::String&amp;) = 0;
              virtual HRESULT Remove(__in const VHGO::String&amp;) = 0;
              virtual HRESULT Get(__in const VHGO::String&amp;, __out VHGO::String&amp;) = 0;
          };
  
          std::wostream&amp; operator&lt;&lt;(std::wostream&amp; os, const BaseTable&amp; b )
          {
              UNREFERENCED_PARAMETER(b);
              return os;
          }
          //////////////////////////////////////////////////////////////////////////////////////////
  
          class BigTable : public BaseTable
          {
              friend class boost::serialization::access;
  
          private:
              VHGO::PropertyMap m_Values;
              template&lt;class Archive&gt;
              void serialize(Archive&amp; ar, const unsigned int version)
              {
                  boost::serialization::split_member(ar, *this, version);
              }
  
  
              template&lt;class Archive&gt;
              void save(Archive&amp; ar, const unsigned int version) const
              {
                  UNREFERENCED_PARAMETER(version);
                  ar &lt;&lt; boost::serialization::base_object&lt;const VHGO::Resource::BaseTable&gt;(*this);
                  ar &lt;&lt; boost::serialization::make_nvp("bigtable", m_Values);
  
              }
  
              template&lt;class Archive&gt;
              void load(Archive&amp; ar, const unsigned int version)
              {
                  UNREFERENCED_PARAMETER(version);
                  ar &gt;&gt; boost::serialization::base_object&lt;BaseTable&gt;(*this);
                  ar &gt;&gt; boost::serialization::make_nvp("bigtable", m_Values);
              }
  
             // BOOST_SERIALIZATION_SPLIT_MEMBER()
  
          public:
              BigTable(__in const VHGO::PropertyMap&amp; propMap)
                  : m_Values(propMap)
              {
  
              }
  
              BigTable()
              {
  
              }
  
              virtual ~BigTable()
              {
  
              }
              HRESULT Add(__in const VHGO::String&amp; propKey, __in const VHGO::String&amp; propValue)
              {
                 //itadds
  
        return S_OK;
              }
  
              HRESULT Remove(__in const VHGO::String&amp; propKey)
              {
                  /*insertchecking*/
                  return S_OK;
              }
  
              HRESULT Get(__in const VHGO::String&amp; key, __out VHGO::String&amp; aValue)
              {
                  aValue = m_Values[key];
                  return S_OK;
              }
  
              VHGO::PropertyMap GetPropertyMap()
              {
                  return m_Values;
              }
          };
  </code></pre>
  
  <p>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,.</p>
  
  <p>The compile error is this:</p>
  
  <pre><code>Error 1 error C2664: 'boost::mpl::assertion_failed' : cannot convert parameter 1 from 'boost::mpl::failed ************boost::serialization::is_wrapper&lt;T&gt;::* ***********' to 'boost::mpl::assert&lt;false&gt;::type'
  </code></pre>
  
  <p>im using VC9.0, and using boost 1.41.</p>
  
  <p>Does anyone have any ideas?</p>
  
  <p><em>EDIT</em></p>
  
  <p>Added the wrapper as suggested</p>
  
  <p>namespace boost { 
      namespace serialization {
          template&lt;>
          struct is_wrapper
              : mpl::true_
          {};
      } // namespace serialization
  } // namespace boost</p>
  
  <p>Still leads to the following error</p>
  
  <pre><code>1&gt;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&lt;T&gt;::* ***********' to 'boost::mpl::assert&lt;false&gt;::type'
  1&gt;        with
  1&gt;        [
  1&gt;            T=const std::list&lt;VHGO::Resource::BaseTable *&gt;
  1&gt;        ]
  1&gt;        No constructor could take the source type, or constructor overload resolution was ambiguous
  1&gt;        d:\wrkspace\Sources\External\boost\boost/archive/detail/interface_oarchive.hpp(64) : see reference to function template instantiation 'void boost::archive::basic_xml_oarchive&lt;Archive&gt;::save_override&lt;T&gt;(T &amp;,int)' being compiled
  1&gt;        with
  1&gt;        [
  1&gt;            Archive=boost::archive::xml_woarchive,
  1&gt;            T=std::list&lt;VHGO::Resource::BaseTable *&gt;
  1&gt;        ]
  </code></pre>
  
  <p><em>EDIT 2</em></p>
  
  <p>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.</p>