title: What happens to an STL iterator after erasing it in VS, UNIX/Linux?
body: <p>Please consider the following scenario:</p>
  
  <pre><code>
  map(T,S*) & GetMap(); //Forward decleration
  
  map(T, S*) T2pS = GetMap();
  
  for(map(T, S*)::iterator it = T2pS.begin(); it != T2pS.end(); ++it)
  {
      if(it->second != NULL)
      {
          delete it->second;
          it->second = NULL;
      }
      T2pS.erase(it);
      //In VS2005, after the erase, we will crash on the ++it of the for loop.
      //In UNIX, Linux, this doesn't crash.
  }//for
  </code></pre>
  
  <p>It seems to me that in VS2005, after the "erase", the iterator will be equal to end(), hence the crash while trying to increment it. 
  Are there really differences between compilers in the behavior presented here?
  If so, what will the iterator after the "erase" equal to in UNIX/Linux?</p>
  
  <p>Thanks...</p>