From patchwork Wed Mar 22 17:49:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jonathan Wakely X-Patchwork-Id: 66764 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 5E0A6384BC32 for ; Wed, 22 Mar 2023 17:51:30 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 5E0A6384BC32 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1679507490; bh=VarJTXgm3DX54P2J7sgdWdYnVHzDYOd5UK753DkbtpA=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=aa4VDYyjXVMWDwultOYrDM3vnVjo4A/pvVNQAQPm2nb8kYMUjhUhbal2IvStjHOSc OyqzZKS6DjyJ2E4PfoOiVfxoBsBh6z6+Vj5JhYlsT/lS1d/65RTNH9ZjIg/4U3vRF5 t4Ndy1lwdTNOVPe/7nNHRMZnigMAL7Rip2Wu64C0= X-Original-To: gcc-patches@gcc.gnu.org Delivered-To: gcc-patches@gcc.gnu.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id D4564385B53F for ; Wed, 22 Mar 2023 17:49:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D4564385B53F Received: from mimecast-mx02.redhat.com (mx3-rdu2.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-370-yQHmdljmMwihKh74n8PT1A-1; Wed, 22 Mar 2023 13:49:43 -0400 X-MC-Unique: yQHmdljmMwihKh74n8PT1A-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.rdu2.redhat.com [10.11.54.2]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 3BB501C0758A; Wed, 22 Mar 2023 17:49:43 +0000 (UTC) Received: from localhost (unknown [10.33.36.149]) by smtp.corp.redhat.com (Postfix) with ESMTP id 01B9240C6E67; Wed, 22 Mar 2023 17:49:42 +0000 (UTC) To: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Subject: [committed] libstdc++: Make std::istream_iterator copy ctor constexpr (LWG 3600) Date: Wed, 22 Mar 2023 17:49:42 +0000 Message-Id: <20230322174942.407933-1-jwakely@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.1 on 10.11.54.2 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.1 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_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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-Patchwork-Original-From: Jonathan Wakely via Gcc-patches From: Jonathan Wakely Reply-To: Jonathan Wakely Errors-To: gcc-patches-bounces+patchwork=sourceware.org@gcc.gnu.org Sender: "Gcc-patches" Tested powerpc64le-linux, pushed to trunk. -- >8-- As explained in LWG 3600, we never implemented a C++0x change that made the copy constructor of std::istream_iterator defined as defaulted. That would be an ABI break, so the resolution of LWG 3600 is to not require it to be trivial, but just constexpr and conditionally noexcept. This applies that resolution. libstdc++-v3/ChangeLog: * include/bits/stream_iterator.h (istream_iterator): Add constexpr to copy constructor, as per LWG 3600. * testsuite/24_iterators/istream_iterator/cons/constexpr.cc: Check copy construction. --- libstdc++-v3/include/bits/stream_iterator.h | 1 + .../24_iterators/istream_iterator/cons/constexpr.cc | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/libstdc++-v3/include/bits/stream_iterator.h b/libstdc++-v3/include/bits/stream_iterator.h index 298d4406afd..9dc4a550be6 100644 --- a/libstdc++-v3/include/bits/stream_iterator.h +++ b/libstdc++-v3/include/bits/stream_iterator.h @@ -80,6 +80,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION : _M_stream(std::__addressof(__s)), _M_ok(true) { _M_read(); } + _GLIBCXX_CONSTEXPR istream_iterator(const istream_iterator& __obj) _GLIBCXX_NOEXCEPT_IF(is_nothrow_copy_constructible<_Tp>::value) : _M_stream(__obj._M_stream), _M_value(__obj._M_value), diff --git a/libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/constexpr.cc b/libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/constexpr.cc index 824cd93ecbe..95fda572d8e 100644 --- a/libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/constexpr.cc +++ b/libstdc++-v3/testsuite/24_iterators/istream_iterator/cons/constexpr.cc @@ -24,5 +24,10 @@ int main() { __gnu_test::constexpr_default_constructible test; test.operator()>(); + + // LWG 3600. Making istream_iterator copy constructor trivial is an ABI break + __gnu_test::constexpr_single_value_constructible test2; + test2.operator(), std::istream_iterator>(); + return 0; }