Например:
string s = "123";
s.assign(find(s.begin(),s.end(),'2'), s.end());
Определено ли поведение вышеуказанного кода? Или это приводит к неопределенному поведению?
Да. Эта версия присвоения определяется как
template<class InputIterator> constexpr basic_string& assign(InputIterator first, InputIterator last);
Ограничения : InputIterator - это тип, который квалифицируется как входной итератор.
Эффекты : Эквивалентно: return assign (basic_string (first, last, get_allocator ()));
который показывает временное значение, вычисленное до внесения изменений.