On Fri, Jan 13, 2017 at 3:27 AM, Ville Voutilainen <ville.voutilai...@gmail.com> wrote: > On 13 January 2017 at 10:09, Ville Voutilainen > <ville.voutilai...@gmail.com> wrote: >>>> Ah, I think I see what you're saying. Just splice them back in any >>>> order. Ok, I'll give that a spin. >>> >>> Right, list::sort doesn't promise strong exception safety, so >>> "unsorting" is not needed. >>> >>> Also, shouldn't merge() rethrow the caught exception rather than swallow it? >> >> Ha, yes, well spotted. I'll cook up an improved patch. > > Thus: > > 2017-01-13 Ville Voutilainen <ville.voutilai...@gmail.com> > > PR libstdc++/78389 > * include/bits/list.tcc (merge(list&&)): > Adjust list sizes if the comparator throws. > (merge(list&&, _StrictWeakOrdering)): Likewise. > (sort()): Splice elements back from the scratch buffers > if the comparator throws. > (sort(_StrictWeakOrdering)): Likewise. > * testsuite/23_containers/list/operations/78389.cc: New.
Shouldn't __carry be spliced back as well?