Daniel Russel wrote: > In addition, changing AttributeTable.h::remove_always to the following > void remove_always(Key k) { > IMP_assert(k != Key(), "Can't remove default key"); > if (k.get_index() < map_.size()) { > map_[k.get_index()]= Traits::get_invalid(); > /*while (!map_.empty() > && map_.back()== Traits::get_invalid()) map_.pop_back();*/ > } > } > > (that is, removing the cleanup loop), makes the problem go away. I think > the line is OK, so it is all a bit disturbing.
The code also looks fine to me, but certainly appears to be the culprit. I replaced it with an uglier use of erase(), which seems to work. Perhaps an MSVC bug or some hidden corruption elsewhere in the code. If the latter, I guess we'll find it eventually.
> BTW, I stumbled upon the msdn page talking about the the /EH flag for > visual studio. Do we need to build with /EH to get things cleaned up > properly when we throw exceptions?
We already build with /GX, which is the same as /EHsc, and I think that's sufficient.
> It also would perhaps be useful to have the debug version of the C++ > runtime available for the tests.
True - I'll look into that.
Ben