[C++-sig] boost::variant and boost::python::extract
Bryan Catanzaro
bryan.catanzaro at gmail.com
Wed May 8 01:03:07 CEST 2013
Hi -
Using Boost 1.53.0, the following code fails to compile with g++, when
c++11 is enabled:
#include <boost/python.hpp>
#include <boost/variant.hpp>
struct A{}; struct B{};
typedef boost::variant<A, B> my_variant;
void foo(boost::python::object o) {
my_variant v = boost::python::extract<my_variant>(o);
}
The error is:
/home/bcatanzaro/boost_1_53_0/boost/variant/variant.hpp:1574:9: error: no
matching function for call to ‘boost::variant<A,
B>::initializer::initialize(void*,
std::remove_reference<boost::python::extract<boost::variant<A, B>
>&>::type)’
Looking at the relevant line in boost/variant/variant.hpp, it looks like
variant is attempting to convert the boost::python::extract<my_variant>
object into either A or B, and failing to find a conversion. Since this
code compiles when c++11 is not enabled, it appears rvalue references
coupled with boost::python::extract are confusing boost::variant's
constructor selection; I would expect it should be copy constructing from
the same variant, rather than convert constructing.
Any advice or workarounds? Turning off c++11 is difficult, since the whole
project relies on it. The code compiles correctly with c++11 turned on with
Boost 1.48.0, so it appears something has regressed.
Thanks,
bryan
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cplusplus-sig/attachments/20130507/463ee447/attachment.html>
More information about the Cplusplus-sig
mailing list