When InputIterator is an input-iterator type, one cannot do: InputIterator it; for(it = first; it != beyond; it++) because input iterators may not be default-constructible. Only forward iterators are required, by the C++03 norm, to be default-constructible. We need to write: for(InputIterator it = first; it != beyond; it++)