>>614
InputIterator は、一度 dereference すると、その状態は保障されない。

InputIterator it = ...
InputIterator itDash = it;
bool a = ( *it == *itDash );

としたとき、a == true は保障されない。