The standard itself has very few mentions of iter_swap:
- It should have the effect of
swap(*a, *b), although there is no stipulation that it must be implemented that way. - The dereferenced values
*aand*bmust be “swappable”, which implies thatswap(*a, *b)must be valid, and thus the dereferenced types must be identical, although the iterator types do not have to be. iter_swapis required to be used in the implementation ofstd::reverse. No such requirement is placed on any other algorithm, so this seems to be an oddity.
To borrow what sehe had found from the SGI docs:
Strictly speaking,
iter_swapis redundant. It exists only for technical reasons: in some circumstances, some compilers have difficulty performing the type deduction required to interpretswap(*a, *b).
All of these seem to suggest that it is an artifact of the past.