title: Decrementing an off the end iterator
body: <p>I was reading today about how for containers that support bidirectional iteration, this piece of code is valid:</p>
  
  <pre><code>Collection c(10, 10);
  auto last = --c.end();
  *last;
  </code></pre>
  
  <p>That got me thinking, is it required that when submitting a pair of bidirectional iterators [beg, end) to an algorithm in the STL that --end is defined? If so, should the result be dereferenceable?</p>
  
  <p>ie</p>
  
  <pre><code>void algo(T beg, T end){
      //...
      auto iter = --end;
      //...
      *iter;
  } 
  </code></pre>