
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 http://www.boostpro.com