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