What would happen if a container that BOOST_FOREACH is iterating through is changed inside the BOOST_FOREACH scope?
Does BOOST_FOREACH "freeze" the initial state?
What would happen if a container that BOOST_FOREACH is iterating through is changed inside the BOOST_FOREACH scope?
Does BOOST_FOREACH "freeze" the initial state?
I guess it depends on the container.
The real question is, whether the (remaining) iterator range for traversal is invalidated or not.
This depends on the change. std
algorithms are specified with their behaviour: they mention what iterators are invalidated when.
It can also depend on the type of iterator,
vector::erase
invalidates all subsequent iteratorslist::erase
does not
In this case behavior is undefined. Look at Hoisting and Iterator Invalidation in official documentation of
BOOST_FOREACH
.