--- 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