https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118035
Jonathan Wakely <redi at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Known to work| |5.4.0 Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |redi at gcc dot gnu.org Known to fail| |5.5.0 Summary|deque<string> bug when |[12/13/14/15 Regression] |inserting an empty iterator |deque<string> bug when |interval |inserting an empty iterator | |interval --- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> --- This operation was always technically undefined on GCC's std::deque, because std::copy_backward has a precondition that the result is not in the input range. It happened to work because the std::string copy assignment operator (like most copy assignment operators) is safe for self-assignment. It continued to "work" after r0-84386-g7ffec97f9e0019 replaced std::copy_backward with std::move_backward (despite that having the same precondition). It only started to lose data with my r5-9770-g397c5bf9204cc8 which re-implemented the std::string move assignment, where the new implementation left a string empty after self-move-assignment.