Boost logo

Boost :

Subject: Re: [boost] [optional] Changes in Boost.Optional
From: Andrzej Krzemienski (akrzemi1_at_[hidden])
Date: 2014-09-09 03:15:20


2014-09-09 7:45 GMT+02:00 Dean Michael Berris <mikhailberis_at_[hidden]>:

> On Tue Sep 09 2014 at 2:20:24 AM Andrzej Krzemienski <akrzemi1_at_[hidden]>
> wrote:
>
> >
> > I went to see how Boost.Variant addresses this problem. Interestingly, it
> > doesn't.
> >
> > #include <boost/variant.hpp>
> >
> > struct Wrapper
> > {
> > operator int () { return 9; }
> > operator boost::variant<int, long> () { return 7; }
> > };
> >
> > int main()
> > {
> > boost::variant<int, long> v = Wrapper();
> > assert(boost::get<int>(v) == 7);
> > }
> >
> > This program assertion-fails on MSVC.
> >
> >
> Okay, that's interesting.
>
> What's the process here, do we file a bug to Microsoft? Send in a defect
> report to the committee? Do we know the clauses in the standard that's
> supposed to make this "do the right thing"?
>

I filed this bug report:
https://connect.microsoft.com/VisualStudio/feedbackdetail/view/967397/incorrect-conversion-handling-in-c

I suppose MSVC 10.0 is no longer supported, but the same bug is present in
all the newer versions of the compiler as well. The standard is clear about
how the initialization should behave here, so the bug belongs to MSVC. It
so obvious that I do not think that any reference to the standard is
necessary. If the developers need it, I will provide it.

Regards,
&rzej


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk