On 07/05/20 09:12 +0200, François Dumont via Libstdc++ wrote:
   This patch purpose is to make sure that existing
std::copy/std::copy_n overloads for char* will also be used for
std::deque<char> iterators when dealing with istreambuf_iterator. It
also make sure that it still works when _GLIBCXX_DEBUG is activated.
   * include/bits/stl_algo.h (__copy_n_a): Move to ...
   * include/bits/stl_algobase.h (__copy_n_a): ...here. Add __strict
   parameter.
   (__niter_base(const _Safe_iterator<_Ite, _Seq,
   random_access_iterator_tag>&)): New declaration.
   (__copy_move_a2(istreambuf_iterator<>, istreambuf_iterator<>,
   _Deque_iterator<>)): New declaration.
   (__copy_n_a(istreambuf_iterator<>, _Size, _Deque_iterator<>, bool)):
   New declaration.
   * include/bits/deque.tcc
   (__copy_move_a2(istreambuf_iterator<>, istreambuf_iterator<>,
   _Deque_iterator<>)): Add definition.
   (__copy_n_a(istreambuf_iterator<>, _Size, _Deque_iterator<>, bool)):
   Add definition.
   * include/bits/streambuf_iterator.h
   (__copy_n_a(istreambuf_iterator<>, _Size, _CharT*, bool)): Adapt
   definition.
   * include/debug/safe_iterator.tcc (__niter_base): Add definition.
   * testsuite/25_algorithms/copy/streambuf_iterators/char/4.cc (test03):
   New.
   * testsuite/25_algorithms/copy/streambuf_iterators/char/debug/
   deque_neg.cc: New.
   * testsuite/25_algorithms/copy_n/debug/istreambuf_ite_deque_neg.cc:
   New.
   * testsuite/25_algorithms/copy_n/istreambuf_iterator/2.cc: New.
   * testsuite/25_algorithms/copy_n/istreambuf_iterator/deque.cc: New.
Already tested for a while on Linux x64 normal and debug modes but I
am currently rebuilding everything and will commit only once all
succeeded again.
Ok ?
François
diff --git a/libstdc++-v3/include/bits/deque.tcc
b/libstdc++-v3/include/bits/deque.tcc
index e773f32b256..45207066c48 100644
--- a/libstdc++-v3/include/bits/deque.tcc
+++ b/libstdc++-v3/include/bits/deque.tcc
@@ -1065,6 +1065,57 @@ _GLIBCXX_END_NAMESPACE_CONTAINER
return __result;
}
+#if __cplusplus >= 201103L
Why is the optimization not done for C++03 mode?
It looks like the uses of 'auto' can be reaplced easily, and
__enable_if_t<> can be replaced with __gnu_cxx::__enable_if<>::__type.