Boost logo

Boost :

Subject: Re: [boost] [serialization] polymorphic archives runtime failure(was:polymorphic archives ... generates linker errors)
From: Bogdan (bogdan.indy_at_[hidden])
Date: 2009-12-03 19:52:40


I just want to confirm I have the same issue with boost 1.41.0 built with
MSVC 9.0 (Visual Studio 2008). I have created two tests similar to the one
Christoph describes ( both with and without DLLs) and I hit exactly the same
assert in basic_serializer_map::find().

It looks like while deserializing B via A*,
basic_iarchive_impl::load_pointer() is trying to recover a serializer from:

boost::serialization::singleton<
boost::archive::detail::archive_serializer_map<boost::archive::naked_xml_iar
chive> >
(or boost::serialization::singleton<
boost::archive::detail::archive_serializer_map<boost::archive::naked_text_ia
rchive> >, depending on the input archive actually used)

but that map is empty.

I checked boost::serialization::singleton<
boost::archive::detail::archive_serializer_map<boost::archive::polymorphic_i
archive> > in the first line of my program and it contains correctly two
serializers (one for A and one for B, respectively), proving that the macro
BOOST_CLASS_EXPORT_IMPLEMENT(.) has registered those classes.

I am not sure why the serializers for A and B do not register with the
specific polymorphic archives but only with the base archive. I was under
the impression that the polymorphic archives are meant to make that process
transparent to the user (especially future archives that are created later).

I appreciate any feedback about this issue and please let me know if you
need more details.

Thank you,

Bogdan

PS

I am using extended type_info_no_rtti.
Deserializing via isomorphic pointers (B*->ser->dser->B*) is working.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk