Hi Robert:

I’ve included string now, and am using namespace std.

I still get the same error, any other ideas.

Cheers

Sean.

From: boost-users-bounces@lists.boost.org [mailto:boost-users-bounces@lists.boost.org] On Behalf Of Robert Ramey
Sent: 18 February 2012 20:15
To: boost-users@lists.boost.org
Subject: Re: [Boost-users] [serialization] issues when writing non-intrusive code

 

Sean Farrow wrote:
> Hi:
> I am writing some non-intrusive serialization code for other c++
> classes.
> I am trying to serialize the wxString class from the wxWidgets
> library.
> I have the following code:
> namespace boost {
> namespace serialization {
>
> template<class Archive>
> void serialize(Archive & ar, wxString & str, const unsigned int
> version)
> {
>                 ar & str.ToStdWstring();
> }
> }
> }
> I noticed the following two typedefs in the wxWidgets code:
>     typedef std::wstring wxStdWideString;
>     typedef std::basic_string<wchar_t> wxStdWideString;
> only one of these is executed.
> I then wrote a second unintrusive serialization class:
> namespace boost {
>                 namespace serialization {
>                                 template<class Archive>
> void serialize(Archive & ar, wxString & str, const unsigned int
> version)
> {
>                 ar & str;
> }
>                 }
> }
> I am getting the following error, using visual c++ 2010:
>      1>c:\program files
> (x86)\boost\boost\archive\basic_xml_oarchive.hpp(92): 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'    
>                  with
>                  [
>                      T=const wxStdWideString
>                  ]
> Given that I have written code to serialize the wxStdWideString
> typedef, does anyone know what is happening? Are typedefs ignored
> with boost serialization. Currently using 1.47. 
> Cheers
> Sean.

seems to me that all you should really need to do is to

 

#include <boost/serialization/string.hpp>

 

this includes serialization implemenations for std::wstring and std::string.

The typedefs you've included above only create some aliases with

weird upper/lower case names.  This shouldn't affect anything.

 

Robert Ramey