From: David Abrahams (david.abrahams_at_[hidden])
Date: 2002-07-21 18:17:21
From: "Itay Maman" <itay_maman_at_[hidden]>
> "David Abrahams" <david.abrahams_at_[hidden]> wrote in message
> > From: "Itay Maman" <itay_maman_at_[hidden]>
> > > >
> > > > template <class T, class U>
> > > > whatever extract(variant<U> const&, boost::type<T>* = 0);
> > > >
> > > This Practically creates two different interfaces: Code written for
> > (for
> > > example) will not work under MSVC since all the
> > > "extract<T>(x);" calls will not work. (I'd be glad to stand corrected
> > > this is not the case).
> > Then so stand.
> > I do this all the time and it works fine with GCC.
> > Why did you think it wouldn't work?
> The problem is on the opposite direction. Consider this piece:
> using boost::extract;
> boost::variant<int, double> v;
> int* p = extract<int>(&v);
> It works fine with GCC, but breaks MSVC.
Patient: "Doctor, it hurts when I do this..."
Doctor: "So don't do that..."
So you can't expect using-declarations to work with MSVC. If you need to
write portable code, do something else, e.g.:
using namespace boost::variants;
int* p = extract<int>(v);
Another solution for things like this that ought to be found via Koenig
lookup anyway is just to stick them in the global namespace for MSVC.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk