Opened 6 years ago

Last modified 6 years ago

#12292 new Bugs

[TypeErasure] Construction of any from static_binding fails if compiling with rvalue-ref support

Reported by: Deniz Bahadir <D.Bahadir@…> Owned by: Steven Watanabe
Milestone: To Be Determined Component: type_erasure
Version: Boost Development Trunk Severity: Problem
Keywords: Cc:

Description

Although the documentation of Boost.TypeErasure explicitly shows how to default-construct an any from the binding of another any, this seems not to work when rvalue-references are supported by the compiler.

The reason is, that the wrong constructor overload is chosen.

binding_of returns a static_binding for which no explicit any-constructor is available. If rvalue-references are not supported by the compiler the constructor-overload which takes a binding is chosen (due to implicit conversion from static_binding to binding).

If rvalue-references are supported the constructor which takes a "universal reference" [1] is chosen instead which does not expect and therefore cannot handle the static_binding.

[1] https://isocpp.org/blog/2012/11/universal-references-in-c11-scott-meyers

Change History (3)

comment:1 by Deniz Bahadir <D.Bahadir@…>, 6 years ago

comment:2 by Deniz Bahadir <D.Bahadir@…>, 6 years ago

I am sorry, I must correct some of my above mentioned explanations.

binding_of does not return a static_binding, but a binding, for which any-constructors are available.

However, make_binding returns a static_binding and I see no reason why creating an any with the help of make_binding should not succeed. So, the pull-request still keeps its relevance.

comment:3 by Steven Watanabe, 6 years ago

I intentionally didn't provide this constructor. I don't see any reasonable use case for it. Also, static_binding in general is not interchangeable with binding, so I don't think it's necessary to provide it for completeness.

Note: See TracTickets for help on using tickets.