Como ejemplo:
string s = "123";
s.assign(find(s.begin(),s.end(),'2'), s.end());
¿Está definido el comportamiento del código anterior? ¿O conduce a un comportamiento indefinido?
Si. Esta versión de asignar se define como
template<class InputIterator> constexpr basic_string& assign(InputIterator first, InputIterator last);
Restricciones : InputIterator es un tipo que califica como un iterador de entrada.
Efectos : Equivalente a: return asignar (basic_string (first, last, get_allocator ()));
que muestra un cálculo temporal antes de que tengan lugar los cambios.