Boost logo

Boost :

Subject: Re: [boost] [iterator] [iterator_facade] operator-> question
From: Dave Abrahams (dave_at_[hidden])
Date: 2011-06-30 18:50:18

At Wed, 29 Jun 2011 13:09:04 -0700,
Jeffrey Lee Hellrung, Jr. wrote:
> Now, iterator_facade< /*...*/ >::operator->'s return type is
> operator_arrow_result< /*...*/ >::type, which, for proxy references,
> according to the logic above in operator_arrow_result, is
> operator_arrow_proxy<T>, where T, in this case, is pair< Index, Value >.
> The error occurs when operator_arrow_proxy<T> is constructed from &x within
> operator_arrow_result< /*...*/ >::make, as it tries to convert a pair<
> Index, Value& >* to a pair< Index, Value >*, which is a no-go.
> It seems to me that a more correct implementation of operator_arrow_result
> would use operator_arrow_proxy< Reference > rather than
> operator_arrow_proxy< ValueType >.

That won't get us what we need: an actual T lvalue as noted in the comment.

> I would further rename and change operator_arrow_proxy's member
> variable to be stored as const T m_ref, rather than mutable T
> m_value.

Is that related to this problem?

> What are others' opinions on this? Am I doing something wrong?

I doubt you're doing anything wrong. I'm fully prepared to believe
the library should be doing something smarter. What that smarter
thing is, I am not sure of, but you might find the answer in one of
the many outstanding tickets.

Dave Abrahams
BoostPro Computing

Boost list run by bdawes at, gregod at, cpdaniel at, john at