Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::variant & c++11
From: Igor R (boost.lists_at_[hidden])
Date: 2013-05-08 02:45:07


> #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;
}


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net