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" <joaquin@tid.es> wrote:
----- Mensaje original -----
De: Ovanes Markarian <om_boost@keywallet.com>
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,