Iterator Swap bug (VC2005SP1)

Back to Compiler bugs

#include <list>

using namespace std; 

int main()
{
   // The same fatal errors are present with
   // all of the stl containers.

   typedef list<int> Container;

   Container a;
   Container b;

   // It doesn't matter whether there is data
   // in the containers or not.

   //a.push_back(1);
   //b.push_back(1);

   {
      // Case 1:
      // Comparing iterators from different containers
      // gives a fatal error. Sounds rational, although
      // the error diagnostics could be better.

      // Fatal error
      //a.begin() == b.begin();
   }

   {
      // Case 2:
      // The following is guaranteed to be
      // legal by the standard.

      Container::iterator i(a.begin());
      a.swap(b);
      Container::iterator j(b.begin());

      // Fatal error
      i == j;
   }

   return 0;
}