title: Why are InputIterators one pass only?
body: <p>From</p>
  
  <h3>24.2.3 Input iterators [input.iterators]</h3>
  
  <blockquote>
    <p>3) [...] Algorithms on input iterators should never attempt to pass
    through the same iterator twice. They should be single pass algorithms. [...]</p>
  </blockquote>
  
  <p>This IMO restricts some fairly straight-forward optimizations (such as passing through the container once to see how many elements it has) - alas, the motivation is outside the scope of the question.</p>
  
  <p>Why this requirement?</p>