title: std::map::iterator decrement on single element
body: <p>What should std::map iterator decrement return, if there's only single element in the map? Here's the sample code</p>
  
  <pre><code>#include &lt;map&gt;
  #include &lt;stdio.h&gt;
  int main()
  {
      std::map&lt;int, int&gt; m;
      m.insert(std::make_pair(1, 1));
      //std::map&lt;int, int&gt;::iterator it = m.begin();
      std::map&lt;int, int&gt;::iterator it = m.upper_bound(0);
      printf("isbegin: %d\n", it == m.begin());
      --it;
      bool isend = it == m.end();
      printf("isend: %d\n", isend);
  }
  </code></pre>
  
  <p>On Windows it will print isend: 1, on Linux with g++ 4.6 it will print isend: 0.</p>
  
  <p>The question: is the decrement above really a case of UB? and if not then what result is correct - Windows or Linux one?</p>
  
  <p>UPDATE: modified code to show that upper_bound is called</p>