> From: Markus Schöpflin [mailto:markus.schoepflin@ginit-technology.com]
> The example I gave in my first post shows such a case and
> it's not a contrieved example.

I agree. I don't think it's a common situation, but it's a perfectly valid use case, and the obvious fix is to make the constructor explicit. It's just that the fix is accompanied by implications, some of them unpleasant.

 
> > Sure it does. The change makes it easier to write illegal
> code that works with this compiler.
>
> I don't follow you here.

If we consider the explicit constructor being an option, not a fix for an error, than that option on this particular compiler will allow illegal code to "work". I admit this is not a strong argument - it's just a reflection.

 
> >
> > With an explicit templated constructor for any, on a
> popular compiler, the following doesn't compile:
> >
> > boost::any a(5);
> >
> > std::vector<boost::any> vec;
> > vec.push_back(a); // doesn't work - cannot convert from
> const boost::any  etc...
>
> Could you name the compiler? My usual suspect (MSVC) does the
> right thing in this case.

Your ususal suspect.NET ;-)

Bjorn Karlsson