
"Delfin Rojas"
Grisha Spivak wrote:
<snip>
it[2] = -22; it[3] = it[5]; std::cout << arr[2*2] << ' ' << arr[3*2] << ' ' << arr[5*2] << '\n';
It prints "-22 33 55" instead of "-22 55 55" (which I expected) - so "it[3] = it[5];" assignment didn't modifies array. Is it intended behaviour? Or maybe I'm doing something wrong?
If you change it[3] = it[5]; with it[3] = 55; it will work. The problem is your iterator_facade::operator[] returns a boost::detail::operator_brackets_proxy which, I'm not sure why, does not seem to implement operator=(operator_brackets_proxy const &). There may be a good reason for this but perhaps the author(s) of the library can answer that.
We didn't think of it ;-) http://www.boost.org/libs/iterator/doc/iterator_facade.html#operator explains why operator[] returns a proxy. You can write: int x = it[5]; it[3] = x; to work around this problem. Jeremy and Thomas: do you think we should change the Mutable_RandomAccessIterator concept to require that it[n] = e work for any e convertible to the iterator's value_type? -- Dave Abrahams Boost Consulting www.boost-consulting.com