From: David Abrahams (dave_at_[hidden])
Date: 2002-12-11 10:51:08
"Fernando Cacciola" <fernando_cacciola_at_[hidden]> writes:
> ----- Original Message -----
> From: "David Abrahams" <dave_at_[hidden]>
> To: "Boost mailing list" <boost_at_[hidden]>
> Sent: Tuesday, December 10, 2002 10:00 PM
> Subject: Re: [boost] Formal review: Optional library
>> "Fernando Cacciola" <fernando_cacciola_at_[hidden]> writes:
>> > I still don't like to think of optional<> as a container, so I still
>> > don't like this reset.
>> Do you really think of auto_ptr and shared_ptr as containers? They
>> seem to have little or nothing in common with any of the standard
> After further thinking I agree that optional<> is as much as a container
> as a smart pointer -not much really-, meaning that you pass a value which
> is contained within the wrapper and which you can access it.
Unfortunately, I also agree with Peter Dimov's analysis of the ways in
which optional<> /is/ like a container. I just meant that the current
_interface_ to optional<>, auto_ptr<>, and shared_ptr<> has nothing in
common with a container's interface. Sorry to make this difficult.
>> > I'm not sure what would be effect of removing deep-constantness.
>> > It would definitely allow the leaner interface you are proposing,
>> Well, deep-constantness is utterly inconsistent with the pointer-like
>> semantics you claim to be implementing. A pointer-ish optional
>> component is a fine idea, but why not follow through all the way with
>> the idiom?
> How is deep-constantness utterly incosistent with pointer-like semantics?
typedef T* ptr;
ptr const p = &x;
T y = *p = x; // constness of p does not affect mutability of referent
If you think deep constness is important, go with a container-like
interface. Mixing idioms, especially very familiar ones, is
>> > This is a possibility.
>> > I could accept something like this, though I constantly see
>> > people complaining about lack of deep constantness on wrappers like
>> > optional<>
>> > What do others think?
>> Is it a wrapper or a pointer?
> Is a wrapper which acts partially like a pointer.
What I said before about mixing idioms, again.
-- David Abrahams dave_at_[hidden] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk