Boost logo

Boost Users :

Subject: Re: [Boost-users] [serialization] loading a map having a const mappedvalue type
From: Marco Canini (marco.canini_at_[hidden])
Date: 2009-08-31 11:43:31


Thanks!
I know that will work. My problem is that the program I'm applying boost
to uses const and I'd rather not modify that.

On Mon, 31 Aug 2009 18:31:31 +0200, Robert Ramey <ramey_at_[hidden]> wrote:

> Try map<string, /* const */ Protocol *> _table;
>
> Robert Ramey
>
> Marco Canini wrote:
>>> Hi all,
>>>
>>> I'm unable to address this use case of the serialization library.
>>> I have a standard map in which the mapped value is const:
>>> map<string, const Protocol *> _table;
>>>
>>> My serialize is very simple:
>>> ar & _table;
>>>
>>> (the test case source code is attached)
>>>
>>> However, this can't be compiled as I get many errors related to the
>>> loading code inside boost::serialization:
>>>
>>> /usr/include/boost/archive/detail/iserializer.hpp:488: error:
>>> reinterpret_cast from type 'const Protocol**' to type 'void**' casts
>>> away constness
>>>
>>> /usr/include/boost/archive/detail/iserializer.hpp:491: error: no
>>> matching function for call to
>>> 'boost::archive::detail::load_pointer_type<boost::archive::text_iarchive,
>>> const Protocol*>::pointer_tweak(const
>>> boost::serialization::extended_type_info&, const Protocol*&, const
>>> Protocol&)'
>>>
>>> /usr/include/boost/serialization/access.hpp:109: error: passing
>>> 'const Protocol' as 'this' argument of 'void
>>> Protocol::serialize(Archive&, unsigned int) [with Archive =
>>> boost::archive::text_iarchive]' discards qualifiers
>>> /usr/include/boost/archive/detail/iserializer.hpp: In member function
>>> 'void boost::archive::detail::pointer_iserializer<T,
>>> Archive>::load_object_ptr(boost::archive::detail::basic_iarchive&,
>>> void*&, unsigned int) const [with T = const Protocol, Archive =
>>> boost::archive::text_iarchive]':
>>>
>>> /usr/include/boost/archive/detail/iserializer.hpp:299: error: invalid
>>> conversion from 'const void*' to 'void*'
>>> /usr/include/boost/archive/detail/iserializer.hpp:307: error: invalid
>>> conversion from 'const void*' to 'void*'
>>> /usr/include/boost/archive/detail/iserializer.hpp:307: error:
>>> initializing argument 1 of 'void
>>> boost::archive::detail::basic_iarchive::next_object_pointer(void*)'
>>>
>>> /usr/include/boost/serialization/access.hpp:123: error: invalid
>>> conversion from 'const void*' to 'void*'
>>> /usr/include/boost/serialization/access.hpp:123: error:
>>> initializing argument 2 of 'void* operator new(size_t, void*)'
>>> /usr/include/boost/serialization/access.hpp:123: error: no matching
>>> function for call to 'Protocol::Protocol()'
>>>
>>> /usr/include/boost/archive/detail/iserializer.hpp:555: error: invalid
>>> application of 'sizeof' to incomplete type
>>> 'boost::STATIC_ASSERTION_FAILURE<false>'
>>> /usr/include/boost/archive/detail/iserializer.hpp:555: error: invalid
>>> application of 'sizeof' to incomplete type
>>> 'boost::STATIC_ASSERTION_FAILURE<false>'
>>>
>>> Can somebody share his wisdom on this please?
>>> Thanks!
>>>
>>> --
>>> Marco Canini
>>
>>
>>
>>> _______________________________________________
>>> Boost-users mailing list
>>> Boost-users_at_[hidden]
>>> http://lists.boost.org/mailman/listinfo.cgi/boost-users

-- 
Marco Canini

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