From: Fernando Cacciola (fernando_cacciola_at_[hidden])
Date: 2003-09-01 12:00:12


Joel de Guzman <djowel_at_[hidden]> wrote in message
news:019401c36f79$84ccdc10$64646464_at_godzilla...
> Brian McNamara <lorgon_at_[hidden]> wrote:
>
> > Offhand, the "pointer interface" for reading the value of an optional
> > seems good to me. Being able to say
> >
> > optional<int> x;
> > ...
> > if( x ) foo( *x );
> >
> > seems like a natural way to "sugarize" this in C++.
>
> IMO, this is better:
>
> optional<int> x;
> if (x == none)
> foo(x);
>
> Although I don't see this as problematic:
>
> optional<int> x;
> if (x)
> foo(x);
>
> Or perhaps:
>
> optional<int> x;
> if (!!x)
> foo(x);
>
>
I see the implicit value access (in foo(x)) as problematic for the reasons I gave before.

> We already have an implicit conversion to safe_bool and an
> operator ! anyway. Keep it. There's nothing wrong with it:
>
> operator unspecified-bool-type() const;
> bool operator!() const;
>
Yes, I think this should be kept.
There is a special section on the documention dealing with the specific case of optional<bool>
just in order to support these _very_ idiomatic operations.

> Perhaps it's just me, but I really dislike the * syntax. Why make optional
> pretend that it is a pointer when it's clearly not! Then, we go on and give
> it value semantics! C'mon!
>
The * syntax is not supposed to make optional<> pretend it is a pointer.
It is clearly not and the documentation says so quite clearly, I think.
And if it doesn't, then it is the documentation that needs to be fixed.

Fernando Cacciola