From: "Fernando Cacciola" <[EMAIL PROTECTED]>
> > > Currently, you can change the value of the optional directly without
any
> > > performance
> > > penalty like this: *opt = new_val, so I don't see any real need for
> > reset().
> >
> > Not correct, *opt has undefined behavior when opt is uninitialized.
> >
> Funny...
> The truth is that *opt has defined behaviour even if it is uninitialized
> when
> used as an lvalue: it can be reset to initialized.
> IOWs, *opt=x is exactly like opt.reset(x).
>
> This is clearly documented, clearly shown on the examples,
> but apparently, clearly wrong :-)
> (otherwise, you and William wouldn't have mistaken it)

The documentation for

proxy optional<T>::operator* ();

says that the behavior is undefined when *this is uninitialized.

The example for proxy::operator= assigns to an initialized optional:

T v0 ;
optional<T> opt(v0);
T v1 ;
*opt = v1;
assert ( *opt == v1 ) ;

If the documentation is wrong (or am I looking at the wrong version?) and
the intent of the proxy is to allow *opt = v, having '*opt' be legal for
non-const opt but illegal for a const opt probably isn't a good idea.

_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to