Boost logo

Boost Users :

From: Duane Murphy (duanemurphy_at_[hidden])
Date: 2004-12-05 21:00:02


--- At Sun, 5 Dec 2004 07:34:38 -0500, David Abrahams wrote:

>David Abrahams wrote:
>> Peter Dimov wrote:
>>
>>> David Abrahams wrote:
>>>
>>>> Duane Murphy wrote:
>>>>
>>>>> I am implementing an iterator via iterator facade. The container
>>>>> that the iterator is being used with can only return dereferenced
>>>>> values by value (not by reference).
>>>>>
>>>>> If I implement the dereference() function (for facade) by returning a
>>>>> value (instead of reference) then it appears that the iterator works
>>>>> properly.
>>>>> The most important operation that does _not_ work is that the
>>>>> iterator cannot be used with bind(). (bind cannot be used with
>>>>> non-const
>>>>> return types.)
>>>>
>>>> Sorry, I can't imagine what you mean. Of course bind works with
>>>> non-const return types: [...]
>>>
>>> Probably the following:
>>>
>>> std::for_each( first, last, boost::bind( f, _1 ) );
>>>
>>> When *first returns a non-const rvalue, bind can't take it.

Bingo! This is the exact case that I am trying to test.

>>
>> I guess the answer is to make the reference type const, then.
>
>That will suppress the iterator's writability, though. I hope it's desired.

No, it's not really.

I was hoping for some kind of proxy interface where a const proxy could
be return and dereferencing the proxy would return the object.

Maybe holding the current value in the iterator is the correct solution.

 ...Duane


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net