Re: [Boost-bugs] [Boost C++ Libraries] #5340: Patch to support concrete base classes becomming abstract classes

Subject: Re: [Boost-bugs] [Boost C++ Libraries] #5340: Patch to support concrete base classes becomming abstract classes
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2014-08-13 07:32:00


#5340: Patch to support concrete base classes becomming abstract classes
-------------------------------------+-------------------------------------
  Reporter: Aaron Barany | Owner: ramey
  <akb825@…> | Status: new
      Type: Patches | Component: serialization
 Milestone: To Be Determined | Severity: Showstopper
   Version: Boost 1.47.0 | Keywords: serialization abstract
Resolution: | concrete
-------------------------------------+-------------------------------------

Comment (by anonymous):

 The patch breaks the compatibility with older implementations. The
 following snipped shows this and it works before applying the patch, now
 the code issue a compiler error on gcc 4.6.3. See attachment
 compileErrorSerialiazationPatch.cpp

 Compiler error

 {{{
 g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP
 -MF"testMemberFuncCheck.d" -MT"testMemberFuncCheck.d" -o
 "testMemberFuncCheck.o" "../testMemberFuncCheck.cpp"
 ../testMemberFuncCheck.cpp:149:1: error: template-id
 â€˜serialize<boostIArchive>’ for ‘void
 AccessTestDerB::serialize(boostIArchive&, unsigned int)’ does not match
 any template declaration
 ../testMemberFuncCheck.cpp:149:1: error: template-id
 â€˜serialize<boostOArchive>’ for ‘void
 AccessTestDerB::serialize(boostOArchive&, unsigned int)’ does not match
 any template declaration
 In file included from
 /usr/include/boost/serialization/split_member.hpp:23:0,
                  from /usr/include/boost/serialization/nvp.hpp:33,
                  from /usr/include/boost/serialization/array.hpp:19,
                  from
 /usr/include/boost/archive/basic_binary_oprimitive.hpp:50,
                  from
 /usr/include/boost/archive/binary_oarchive_impl.hpp:22,
                  from /usr/include/boost/archive/binary_oarchive.hpp:21,
                  from ../testMemberFuncCheck.cpp:106:
 /usr/include/boost/serialization/access.hpp: In instantiation of ‘const
 bool
 boost::serialization::access::has_serialize_func<boost::archive::binary_iarchive,
 AccessTestDerB>::value’:
 /usr/include/boost/serialization/access.hpp:306:21: instantiated from
 â€˜static void boost::serialization::access::serialize(Archive&, T&,
 unsigned int) [with Archive = boost::archive::binary_iarchive, T =
 AccessTestDerB]’
 /usr/include/boost/serialization/serialization.hpp:69:5: instantiated
 from ‘void boost::serialization::serialize(Archive&, T&, unsigned int)
 [with Archive = boost::archive::binary_iarchive, T = AccessTestDerB]’
 /usr/include/boost/serialization/serialization.hpp:128:9: instantiated
 from ‘void boost::serialization::serialize_adl(Archive&, T&, unsigned int)
 [with Archive = boost::archive::binary_iarchive, T = AccessTestDerB]’
 /usr/include/boost/archive/detail/iserializer.hpp:192:5: 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::binary_iarchive, T =
 AccessTestDerB]’
 ../testMemberFuncCheck.cpp:157:1: instantiated from here
 /usr/include/boost/serialization/access.hpp:78:9: error:
 â€˜&AccessTestBase::serialize’ is not a valid template argument for type
 â€˜void (AccessTestDerB::*)(boost::archive::binary_iarchive&, unsigned int)’
 because it is of type ‘void
 (AccessTestBase::*)(boost::archive::binary_iarchive&, unsigned int)’
 /usr/include/boost/serialization/access.hpp:78:9: note: standard
 conversions are not allowed in this context
 /usr/include/boost/serialization/access.hpp: In instantiation of ‘const
 bool
 boost::serialization::access::has_serialize_func<boost::archive::binary_oarchive,
 AccessTestDerB>::value’:
 /usr/include/boost/serialization/access.hpp:306:21: instantiated from
 â€˜static void boost::serialization::access::serialize(Archive&, T&,
 unsigned int) [with Archive = boost::archive::binary_oarchive, T =
 AccessTestDerB]’
 /usr/include/boost/serialization/serialization.hpp:69:5: instantiated
 from ‘void boost::serialization::serialize(Archive&, T&, unsigned int)
 [with Archive = boost::archive::binary_oarchive, T = AccessTestDerB]’
 /usr/include/boost/serialization/serialization.hpp:128:9: instantiated
 from ‘void boost::serialization::serialize_adl(Archive&, T&, unsigned int)
 [with Archive = boost::archive::binary_oarchive, T = AccessTestDerB]’
 /usr/include/boost/archive/detail/oserializer.hpp:152:5: instantiated
 from ‘void boost::archive::detail::oserializer<Archive,
 T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*)
 const [with Archive = boost::archive::binary_oarchive, T =
 AccessTestDerB]’
 ../testMemberFuncCheck.cpp:157:1: instantiated from here
 /usr/include/boost/serialization/access.hpp:78:9: error:
 â€˜&AccessTestBase::serialize’ is not a valid template argument for type
 â€˜void (AccessTestDerB::*)(boost::archive::binary_oarchive&, unsigned int)’
 because it is of type ‘void
 (AccessTestBase::*)(boost::archive::binary_oarchive&, unsigned int)’
 /usr/include/boost/serialization/access.hpp:78:9: note: standard
 conversions are not allowed in this context
 }}}

 PS: Maybe someone can say how to log in here or how to recover my old
 account. Pressing Login will only give a shitty login prompt without
 anything else.

-- 
Ticket URL: <https://svn.boost.org/trac/boost/ticket/5340#comment:7>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-02-16 18:50:16 UTC