Boost logo

Boost :

From: Alberto Barbati (abarbati_at_[hidden])
Date: 2002-12-14 07:37:25


Fernando Cacciola wrote:
>>As an example, currently the C++ standard includes
>> T & stack<T>::top(), with precondition !(stack.empty()).
>>
>>Instead, it could be
>> may_be<T> & stack<T>::top(); // no precondition required
>>
>>
>><set> could be improved also, instead of:
>> pair<iterator, bool> set::insert(const value_type & x)
>>
>>we would use
>> may_be<iterator> set::insert(const value_type & x)
>
> Those are interesting examples! Thanks.
> They can all be paralleled with optional<> whatever the model and interface
> we choose.
> Which can of shows that the concept is useful.

If I can say it, I don't think that they are really good examples.

The stack::top signature is wrong, it should return a value and not a
reference and thus it may require a copy of the returned object. This
makes the proposed signature is potentially less efficient. Moreover,
the result of top() could not be used by the caller to modify the
top-most element. For this reason, a more correct signature would be

     may_be<T&> stack<T>::top();

but, unfortunately, I don't think it's legal.

The proposed signature of set::insert is a downgrade and not an
improvement. Even if the element is not inserted, I still may want to
have the iterator. In order to perform its operation, insert() will have
to compute such iterator, so what's the point in discarding it?

Just my opinion,

-Alberto


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