From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.81]) by sourceware.org (Postfix) with ESMTP id 488563840C1C for ; Thu, 21 May 2020 12:17:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 488563840C1C Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-33-aJzqDszqPHSjayzs6hN6lg-1; Thu, 21 May 2020 08:17:15 -0400 X-MC-Unique: aJzqDszqPHSjayzs6hN6lg-1 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 52FA5BFC1; Thu, 21 May 2020 12:17:14 +0000 (UTC) Received: from localhost (unknown [10.33.36.13]) by smtp.corp.redhat.com (Postfix) with ESMTP id BFE99105959A; Thu, 21 May 2020 12:17:13 +0000 (UTC) Date: Thu, 21 May 2020 13:17:12 +0100 From: Jonathan Wakely To: =?iso-8859-1?Q?Fran=E7ois?= Dumont Cc: "libstdc++@gcc.gnu.org" , gcc-patches Subject: Re: [PATCH] Extend std::copy/std::copy_n char* overload to deque iterator Message-ID: <20200521121712.GC2678@redhat.com> References: MIME-Version: 1.0 In-Reply-To: X-Clacks-Overhead: GNU Terry Pratchett X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Transfer-Encoding: 8bit Content-Disposition: inline X-Spam-Status: No, score=-14.2 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=unavailable autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 May 2020 12:17:18 -0000 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 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.