I'm using boost::multi_index obtained via CVS on Fri Jun 29 12:30:03 EDT 2007. In my application, I'm using a multi_index container that has one ordered index. Call the container Present and the index YIndex. I'm at the point in which I need to erase an element which returns a YIndex::iterator. Its important that I know the neighbors of the element erased with respect to the YIndex. I know that the element which I look for in the container must exist, so I have an assert that will fail if the searched for element isn't found. If I code it like this: YIndex& index=m_present.get<0>(); YIndex::iterator iter = index.begin(); for (;iter!=index.end();++iter) if (m_future.top().getEdges().first == iter->getEdge()) break; assert(iter!=index.end()); iter = index.erase(iter); The assert goes off the 4th time this code runs. If I change the code to this: Present::iterator iter = m_present.begin(); for (;iter!=m_present.end();++iter) if (m_future.top().getEdges().first == iter->getEdge()) break; assert(iter!=m_present.end()); iter = m_present.erase(iter); The application runs to completion, but since I need YIndex::iterators I can't code what is needed by my application. I'm assuming that calling erase corrupts the ordered index. What do I have to do to correct this?