From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: 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 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1679507386; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=VarJTXgm3DX54P2J7sgdWdYnVHzDYOd5UK753DkbtpA=; b=em0SqEZgxuMhsfSD3lm8jqtgAKPlnu2AuIo2Bi7jZkxmkTE757aLEHP11GoLTy2pYz0M/U j9/OpyC+V9aEJ5Lk5GT5r89feMTWlx4KCfgkGqJfOivRrJtw3XxBpW5QplMNIDnQRNTQlD oeKyMxKaQJ4YZWKcolc9NXcjR9rjenU= 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) From: Jonathan Wakely 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 Content-Type: text/plain Content-Transfer-Encoding: 8bit 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 List-Id: 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; } -- 2.39.2