Fix stable_sort to work on iterators returning rvalue
Paolo Carlini
paolo.carlini@oracle.com
Fri May 25 22:12:00 GMT 2012
On 05/25/2012 10:42 PM, François Dumont wrote:
> Hi
>
> The issues I had when trying to use stable_sort with move_iterator
> was in fact not all coming from a missing swap overload. In fact
> stable_sort do not accept iterators with dereference operator
> returning pure rvalue. I use std::vector<bool>::iterator to illustrate
> this problem. The problem was in fact coming from
> __uninitialized_construct_buf that was taking a lvalue reference. I
> simply modify the function and the underlying helper struct to
> dereference the iterator as late as possible that is to say only when
> we need to pass it to the std::move function.
>
> 2012-05-25 François Dumont <fdumont@gcc.gnu.org>
>
> * include/bits/stl_tempbuf.h (__uninitialized_construct_buf)
> (__uninitialized_construct_buf_dispatch<>::__ucr): Fix to work
> with iterator returning rvalue.
> * testsuite/25_algorithms/stable_sort/3.cc: New.
>
> Tested under x86_64 linux with make check and make CXXFLAGS=-std=c++11
> check.
>
> Ok to commit ?
Patch looks pretty good to me. It would be great if the usual friends of
libstdc++ could also have a look, in particular Chris (if I remember
correctly he invented this stuff)
Thanks,
Paolo.
PS: as a very minor nit, remember the bool test variable in test01.
More information about the Libstdc++
mailing list