David Abrahams <[EMAIL PROTECTED]> writes: > Dave Gomboc <[EMAIL PROTECTED]> writes: > >> [Fernando Cacciola] >>> The most fundamental point is that being Haskell a pure functional >>> language there is no possibly undefined behaviour to worry about, >>> so Maybe doesn't need to address this issue as optional<> does. >> ... and later ... >>> I account the possibly undefined behavior of accesing an uninitialized >>> optional as a real and important problem. >> >> You can get rid of the possibly undefined behaviour by defining it! Throw >> an exception when there's an attempted coercion from nil/undefined to a >> normal value. > > That could have a significant negative impact on performance and code > size, FWIW. > >>> 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. >> >> No, the interface should be changed, because it _looks_ like it has pointer >> semantics. > > So do the proxies required by input iterators over classes and a few > other such proxy pointers. They all contain the value they "point > at". > > IMO get<X>(y) is the solution to this problem. > >> But they are iterators, and random-access iterators exhibit pointer >> semantics. That's the reason iterators use operator* and operator-> in the >> first place! > > Input iterators also contain the values *they* reference.
Just to clarify, I don't claim this makes optional<T> "pointer-like": I think it's an _approximation_ to exactly what the anti-pointer crowd have been saying it is, a "T or not". I do think that renders the pointer interface non-ridiculous, and I see the author's point about the syntax being a useful clue as to its possible nil value. Unfortunately the C++ language makes it impossible for it to ever really act like a T, and I think a core syntax which doesn't try to hide that fact is probably a good idea. -- Dave Abrahams Boost Consulting www.boost-consulting.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost