Opened 12 years ago
Closed 12 years ago
#4676 closed Patches (fixed)
Ambiguous register_type with polymorphic_x_?archive on g++
| Reported by: | Richard Hazlewood | Owned by: | Robert Ramey |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | serialization |
| Version: | Boost 1.44.0 | Severity: | Problem |
| Keywords: | gcc g++ ambiguous polymorphic archive | Cc: |
Description
Using the register_type<> mechanism with a polymorphic archive causes ambiguity errors on g++.
Example and patch attached (for detail/polymorphic_?archive_route.hpp).
Attachments (2)
Change History (7)
by , 12 years ago
| Attachment: | register_type_ambig.cpp added |
|---|
comment:2 by , 12 years ago
no way can I put a "using" declaration in a *.hpp file.
What we can do is add the following to polymorphic_oarchive:
// register type function
const basic_pointer_iserializer *
register_type(T * t = NULL){
return ArchiveImplementation::register_type(t);
}
and similar block to polymorphic_oarchive. Would that not solve the issue. I've included this in my code base for eventual migration to trunk and release but don't have a specific test yet. Care to try this?
Robert Ramey
comment:3 by , 12 years ago
The "using" is a convenience (std: 7.3.3) to bring one of the routes to register_type<> into scope of the polymorphic_?archive_route classes. However, if you are concerned that a compiler may not support it, a routing register_type<>, as you specify, achieves the same ends - it matters not to me.
However, I suspect it will have to go at the same place as the using patch; i.e. in the archive::detail::polymorphic_?archive_route classes. It is at this point in the hierarchy that the two ambiguous routes to register_type<> (interface_?archive) occur; taking polymorphic_binary_oarchive as an example:
polymorphic_binary_oarchive:
polymorphic_oarchive_route<>
|
----------------------------------------
| |
polymorphic_oarchive (ArchiveImplementation)
| binary_oarchive_impl<naked_binary_oarchive>
interface_oarchive<poly_oa> |
basic_binary_oarchive<naked_binary_oarchive>
|
common_oarchive<naked_binary_oarchive>
|
-----------------------------
| |
basic_oarchive interface_oarchive<naked_binary_oarchive>
I'm happy to test anything you have; is it on a branch in the SVN repository?
comment:5 by , 12 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |

g++ register_type ambiguity