Joaquin,
but you could use an assert in the debug version? That would be of great
help.
I did not call modify(view.end(), ...). But my iterator was invalid, which I
wrongly initialized before. The call is just a further test to find out why
I got the wrong object instance in the modifier.
In this case to produce an assertion failure is probably of great help to
the developer.
Many thanks,
Ovanes
On 11/20/07, "JOAQUIN LOPEZ MU?Z"
----- Mensaje original ----- De: Ovanes Markarian
Fecha: Martes, Noviembre 20, 2007 4:57 pm Asunto: [Boost-users] [multi-index] dereferencing the end iterator Para: boost-users@lists.boost.org Hello Joaquín,
today I faced some problem, when debugging the code. [...] When created a view for vx_hash tag and going to change the invalid iteratorlike view.end(). Dereferencing view.end() fails as awaited, but this code which calls my TypeModifier:
view.modify(view.end(), my_modifier);
This will result in my_modifier call with dereferenced iterator, which contains badly initialized object. [...]
Calling modify(end(),...) is illegal just as dereferencing end() is, but that does not mean that you can expect a crash when doing so: as you're invoking undefined behavior anything can happen.
If you want to make sure that these illegal operations are properly detected and reported in a predictable way, take a look at Boost.MultiIndex safe mode:
http://boost.org/libs/multi_index/doc/tutorial/debug.html#safe_mode
(Don't forget to turn it off in release mode). Hope this helps,