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
*a
and *b
must be "swappable", which implies that swap(*a, *b)
must be valid, and thus the dereferenced types must be identical, although the iterator types do not have to be.
iter_swap
is required to be used in the implementation of std::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_swap
is redundant. It exists only for technical reasons: in some circumstances, some compilers have difficulty performing the type deduction required to interpret swap(*a, *b)
.
All of these seem to suggest that it is an artifact of the past.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…