On 09/09/19 20:34 +0200, François Dumont wrote:
Hi
This patch improves stl_algobase.h
copy/copy_backward/fill/fill_n/equal implementations. The improvements
are:
- activation of algo specialization for __gnu_debug::_Safe_iterator
(w/o _GLIBCXX_DEBUG mode)
- activation of algo specialization for _Deque_iterator even if mixed
with another kind of iterator.
- activation of algo specializations __copy_move_a2 for something else
than pointers. For example this code:
std::vector<char> v { 'a', 'b', .... };
ostreambuf_iterator out(std::cout);
std::copy(v.begin(), v.end(), out);
is not calling the specialization __copy_move_a2(const char*, const
char*, ostreambuf_iterator<>);
It also fix a _GLIBCXX_DEBUG issue where the __niter_base
specialization was wrongly removing the _Safe_iterator<> layer. The
testsuite/25_algorithms/copy/debug/1_neg.cc test case was failing on a
debug assertion because _after_ the copy we were trying to increment
the vector iterator after past-the-end. Of course the problem is the
_after_, Debug mode should detect this _before_ it takes place which
it does now.
Note that std::fill_n is now making use of std::fill for some
optimizations dealing with random access iterators.
Performances are very good:
This looks good, but I'm unable to apply the patch:
error: patch failed: libstdc++-v3/include/bits/deque.tcc:967
error: libstdc++-v3/include/bits/deque.tcc: patch does not apply
error: patch failed: libstdc++-v3/include/bits/stl_algobase.h:499
error: libstdc++-v3/include/bits/stl_algobase.h: patch does not apply
Could you regenerate the patch (against a clean master tree) and
resend? Thanks.