Re: std::iter_swap and proxies
"Mycroft Holmes" <m.holmes@nospam.it> wrote in message
news:Oc7nAgS3JHA.1096@TK2MSFTNGP06.phx.gbl
we are testing some stl-compliant containers that have iterators on
bits (as vector<bool>)
This is an oxymoron. STL-compliant containers cannot have iterators on
bits. In particular, vector<bool> does not meet container requirements.
For more details, see
http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#96
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/1999/n1185.pdf
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2160.html
in visual studio 200x, iter_swap(i,j) performs swap(*i, *j).
See http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#187
but if *i is a proxy and not a real reference, this does not work
.... because i is not a forward iterator. See 24.1.3 table 74, which
requires that *i return a T&, where T is the value_type of the iterator.
Obviously we had to specialize std::swap for CONST PROXY_T&, but we
have the vague feeling that this could be avoided. any comments?
If you could specialize swap for your proxies, can't you also specialize
iter_swap for your "iterators"?
--
With best wishes,
Igor Tandetnik
With sufficient thrust, pigs fly just fine. However, this is not
necessarily a good idea. It is hard to be sure where they are going to
land, and it could be dangerous sitting under them as they fly
overhead. -- RFC 1925