|
Boost : |
Subject: Re: [boost] [Serialization] BOOST_CLASS_EXPORT regression on SunCC
From: Sohail Somani (sohail_at_[hidden])
Date: 2009-02-17 00:43:24
Hey Robert,
I guess that is possible. I have no idea *why* it is not getting
instantiated though so I wouldn't know where to start. Any suggestions?
In any case, what part of the standard says that the return type should
be instantiated? I read the part referenced in register_archive.hpp
(temp.dep.candidate) but I can't see how to interpret that as "must
instantiate the return type."
Also, it turns out that base_object also has a regression which may be
related. I had to explicitly instantiate void_cast_register to get the
test to pass.
Robert Ramey wrote:
> Look at the code - It's not just SunCC
>
> template <class Archive, class Serializable>
> struct ptr_serialization_support
> {
> # if defined(BOOST_MSVC)
> virtual BOOST_DLLEXPORT void instantiate() BOOST_USED;
> # elif defined(__BORLANDC__)
> static BOOST_DLLEXPORT void instantiate() BOOST_USED;
> enum { x = sizeof(instantiate(),3) };
> # else
> static BOOST_DLLEXPORT void instantiate() BOOST_USED;
> typedef instantiate_function<
> &ptr_serialization_support::instantiate
>> x;
> # endif
> };
>
> Can we not find some bit of magic to make SunCC instatiate that whic is
> needed?
>
> Robert Ramey
>
> Sohail Somani wrote:
>>> From version 1.34 to 1.35, the export of classes was modified so that
>> all the archives did not need to be included before calls to
>> BOOST_CLASS_EXPORT. I don't know why this was a problem to begin with.
>>
>> Anyway, this feature used to work on SunCC but with the new changes,
>> there is a regression. This is caused by the dependence on ADL to
>> instantiate the ptr_serialization_support members: SunCC just doesn't
>> do
>> it. So the instantiations never occur and you get an assertion failure
>> when running the serialization tests under debug:
>>
>> Assertion failed: it != boost::serialization::singleton<
>> oserializer_map<Archive> >::get_const_instance().end(), file
>> vendor/boost_1_37_0/boost/archive/impl/archive_pointer_oseri\
>> alizer.ipp, line 64
>>
>> I know how to fix it (instantiating manually for each
>> Archive,Serializable pair, not a huge problem).
>>
>> I would suggest that Boost Serialization should have a fallback
>> mechanism for
>> these compilers. Perhaps along the lines of the old export
>> functionality where the user would define the archives they are
>> interested in.
>>
>> Thoughts?
>>
>> _______________________________________________
>> Unsubscribe & other changes:
>> http://lists.boost.org/mailman/listinfo.cgi/boost
>
>
>
> _______________________________________________
> Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
>
-- Sohail Somani http://uint32t.blogspot.com
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk