On Sun, Aug 31, 2003 at 11:11:10AM -0700, Mat Marcus wrote:
> --On Sunday, August 31, 2003 1:35 PM -0400 Brian McNamara 
> >On Sun, Aug 31, 2003 at 11:59:42PM +0800, Joel de Guzman wrote:
> >>It's really strange (and hard to explain) that you have to
> >>dereference optional<B>. Example:
> >>
> >>    F(tuple<A, optional<B>, C> args)
> >>    {
> >>        A a = get<1>(args);
> >>        B b = *get<2>(args); // strange!
> >>        C c = get<3>(args);
> >>    }
> >
> >I don't think it's strange at all; an optional<B> is not a B!
> 
> That doesn't make it a pointer to B!

True.  See my message of a moment ago, where I adopt the notion that
'*' is just an unfortunate coincidence of names, and that any
relationship between optional and pointers is mere happenstance.  (This
all despite the documentation on optional which explicitly describes
the relationship; I am merely trying to present another way of looking
at it which may be useful.)

> >As another example, FC++ lists support conversion-to-bool
> 
> There's conversion-to-bool again. I still wonder whether dispensing 
> with this would open the door to implicit conversions.

I think no.

I should mention in passing that, while in general I think "implicit
conversions" are bad news and should be avoided whenever reasonable, I
do think the "conversion to bool" is an exceptional case, simply because
it is already so deeply ingrained in C++ (and C) language/culture.

(Fortunately bool has a very narrow interface, so it doesn't get us into
too much trouble.  Implicit conversions to user-defined types may create
arbitrary interface conflicts/conceptual ambiguities, and this is where
the real trouble begins.)

-- 
-Brian McNamara ([EMAIL PROTECTED])
_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to