Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::variant & c++11
From: Antony Polukhin (antoshkka_at_[hidden])
Date: 2013-05-15 05:03:40


2013/5/10 Antony Polukhin <antoshkka_at_[hidden]>:
> 2013/5/8 Igor R <boost.lists_at_[hidden]>:
>>> #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
>>> }

Reproduced that error on 1.48.0 using MSVC.

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

Reproduced that error on 1.48.0 using MSVC.

Looks like this problem is not affected by latest changes in Boost.
Have you changed the compiler during migration to Boost 1.53? Have
been some code changes made during migration? Do you compile with same
options before and after migration?

--
Best regards,
Antony Polukhin

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