Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2003-09-02 06:49:14


Dave Gomboc <dave_at_[hidden]> 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.

-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk