A similar bug #458027 was closed as by design in 6/2009. I'd like another look from the development team as I feel this is a bug in the vc10 xutility code.
An iterator is similar to a pointer. It can hold a singlular value initially, and it makes sense to allow it to be reset with a singular value. An analogy using pointers: this "const char* s=0; s="abc"; s=0;" code is valid and crashes are expected if you dereference a null pointer. Similar iterator code like "std::string::const_iterator it0, it1; it1=s.begin(); it1=it0;" should be considered valid and crashes are expected if you dereference an iterator holding a singular value.
Real code in microsoft's greta-2.6.4 which should be considered valid:
IterT & reserved1 = param.m_prgbackrefs[ m_cgroup ].reserved1;
IterT old_ibegin = reserved1;
reserved1 = icur;
reserved1 = old_ibegin; //can unexpectedly crash in vc10 debug builds