title: map.erase( map.end() )?
body: <p>Consider:</p>
  
  <pre><code>#include &lt;map&gt;
  
  int main()
  {
      std::map&lt; int, int &gt; m;
      m[ 0 ] = 0;
      m[ 1 ] = 1;
  
      m.erase( 0 );  // ok
      m.erase( 2 );  // no-op
      m.erase( m.find( 2 ) );  // boom!
  }
  </code></pre>
  
  <p>(OK, so the title talks abouting erasing an end() iterator, but find will return end() for a non-existent key.)</p>
  
  <p>Why is erasing a non-existent key OK, yet erasing end() blows up. I couldn't see any explicit mention of this in the standard?</p>
  
  <p>I've tried this on VS2005 (throws an exception in debug configuration) and GCC 4.0.1 (100% CPU). Is it implementation dependent?</p>
  
  <p>Thanks.</p>