2013/5/8 Igor R <boost.lists@gmail.com>:
#include <boost/variant.hpp> //A simplified wrapper template<typename T> struct wrap { T t; wrap(T& _t) : t(_t) {} operator T() const { return t; } T force() const { return t; } };
struct A{}; struct B{};
typedef boost::variant<A, B> my_variant;
int main() { A a; my_variant x(a); #ifndef WAR my_variant y = wrap<my_variant>(x); #else my_variant y = wrap<my_variant>(x).force(); #endif }
And the error:
/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<wrap<boost::variant<A, B> >&>::type)’
FWIW, your case can be reproduced with even more trivial code:
#include <boost/variant.hpp>
typedef boost::variant<int> my_variant; struct convertible { operator my_variant() const { return my_variant(); } };
int main() { convertible x; my_variant y = x; }
I'll take care of that issue, but not 100% sure that there will be enough time to push fix to 1.54. There is a ticket for that issue: https://svn.boost.org/trac/boost/ticket/8555 . -- Best regards, Antony Polukhin