[serialization] nvp.hpp include order problem

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[serialization] nvp.hpp include order problem

Kim Barrett
In boost 1.33.1, using gcc 3.3.5 (SuSE9.3 on x86 if it matters)

I've run into an include order problem with the serialization
library.

It seems that including <boost/serialization/nvp.hpp> before
including <boost/archive/polymorphic_iarchive.hpp> (or oarchive)
doesn't work. In a translation unit that does this and includes
an invocation of serialization, I get an error of the form:

   .../iserializer.hpp: In constructor
      `...iserializer<Archive, T>::iserializer()
   [with ARchive = polymorphic_archive, T = my_type]':
      ... lots of intermediate instantiations ...
   error: incomplete type
     boost::serialization::extended_type_info_null<my_type>
     cannot be used to name a scope

If nvp.hpp is included later (or not explicitly included at all,
since I see that polymorphic_iarchive.hpp includes it at the end of
its include block), all is well. A little more poking at it by
hoisting out the nested includes from nvp.hpp directly into my source
file found that including polymorphic_[io]archive.hpp before
type_info_implementation.hpp makes the problem go away too.

   nvp -> level -> traits -> type_info_implementation

I know Robert has fixed a bunch of include order issues, and I think
I recall that some of those fixes were post-1.33.1. Is this a known
one? Or is a reproducible test case needed? Or is this a real include
order dependency that one simply must avoid?

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
Reply | Threaded
Open this post in threaded view
|

Re: [serialization] nvp.hpp include order problem

Robert Ramey
I believe that Joaquin has found the "last one".  The fix is in 1.34 and
hopefully there won't be any more.  If you want to help, you could
test your case against the cvs tree.

Robert Ramey


Kim Barrett wrote:

> In boost 1.33.1, using gcc 3.3.5 (SuSE9.3 on x86 if it matters)
>
> I've run into an include order problem with the serialization
> library.
>
> It seems that including <boost/serialization/nvp.hpp> before
> including <boost/archive/polymorphic_iarchive.hpp> (or oarchive)
> doesn't work. In a translation unit that does this and includes
> an invocation of serialization, I get an error of the form:
>
>   .../iserializer.hpp: In constructor
>      `...iserializer<Archive, T>::iserializer()
>   [with ARchive = polymorphic_archive, T = my_type]':
>      ... lots of intermediate instantiations ...
>   error: incomplete type
>     boost::serialization::extended_type_info_null<my_type>
>     cannot be used to name a scope
>
> If nvp.hpp is included later (or not explicitly included at all,
> since I see that polymorphic_iarchive.hpp includes it at the end of
> its include block), all is well. A little more poking at it by
> hoisting out the nested includes from nvp.hpp directly into my source
> file found that including polymorphic_[io]archive.hpp before
> type_info_implementation.hpp makes the problem go away too.
>
>   nvp -> level -> traits -> type_info_implementation
>
> I know Robert has fixed a bunch of include order issues, and I think
> I recall that some of those fixes were post-1.33.1. Is this a known
> one? Or is a reproducible test case needed? Or is this a real include
> order dependency that one simply must avoid?
>
> _______________________________________________
> Unsubscribe & other changes:
> http://lists.boost.org/mailman/listinfo.cgi/boost 



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost