From patchwork Mon Jan 15 18:49:20 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Patrick Palka X-Patchwork-Id: 1886813 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=U+gSN2a4; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=server2.sourceware.org; envelope-from=gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org; receiver=patchwork.ozlabs.org) Received: from server2.sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4TDLnd2LYsz1yPJ for ; Tue, 16 Jan 2024 05:51:01 +1100 (AEDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 465CA3858D35 for ; Mon, 15 Jan 2024 18:50:59 +0000 (GMT) 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.129.124]) by sourceware.org (Postfix) with ESMTPS id 864423858D20 for ; Mon, 15 Jan 2024 18:50:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 864423858D20 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 864423858D20 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=170.10.129.124 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705344633; cv=none; b=sklwPSqByPZ2p+LyYOTFsTsDTlndFk6F2ilJvQxoVgkau8BbLUJAvBmHhgk+0hsnpy7Ca9A1kWtK6ADizW+sBJ7ItQMpDgkK1sT/sg7CgmhTGT0f+Q2nOGR9WEL5dgYnhAMwd/YQqj3uEoUn4QyS8JNzWj2mh9DmsSLRmmHOFO0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1705344633; c=relaxed/simple; bh=vT3jJCBozgYyLsdYthp+UukpuXCq8ep33mlh/+fhVkI=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=JxJvaBkclhN/V+t3tXKG3xQ6iRLxltiaP+PZ+zkYpR14y0z2rVei4/dPfRY7ctPlvSk3ESLEbz4YEJqyaAQf1GC7nW+F0l7/ot//dwSeURbvIfYU+slmfzQ9y9HvY2SD9+IJVvx0yRFIgQ+VaqIgrAOT/1ZCyoSFdFWYbpuRm9A= ARC-Authentication-Results: i=1; server2.sourceware.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1705344630; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=Hrk1gmRbNjvXQPddfGP3WPDQ5BCtr4P2X7+O+XpUMSA=; b=U+gSN2a4U9ei2rBG8Y+4ORf6FzujzlAtrh30Hv8wNBkX6wAW1wjgpETZQmQhauoK4Zoyfn 5Uam0LatKU3Ayr0HRW06KXeTfhhDwXO8ZJ83YguUJ9vJKa1JFrGwhN8VODlSl/4GV4b0UK J+hx2ZwvoK1aFcwdPYRWCPSB3pihXkY= Received: from mail-qv1-f71.google.com (mail-qv1-f71.google.com [209.85.219.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-381-7C7ZRk0MOmqY5xBUC9PnaQ-1; Mon, 15 Jan 2024 13:50:28 -0500 X-MC-Unique: 7C7ZRk0MOmqY5xBUC9PnaQ-1 Received: by mail-qv1-f71.google.com with SMTP id 6a1803df08f44-6812d4f6196so80605696d6.1 for ; Mon, 15 Jan 2024 10:50:28 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1705344627; x=1705949427; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Hrk1gmRbNjvXQPddfGP3WPDQ5BCtr4P2X7+O+XpUMSA=; b=AkAlapKBfaAB4+G33u1u0MSWTXLBaqgMhcuwXwi+O+WYb77AxGQIqnAXbgNgapxrVm zVEqs3VLrLUZWw8O4N/Ut0S2jJcbtUu8AX9b1oUU8gVp1X+nSpe9/2Wm2cf0KPhSKMwX H7n+XZd/gpqu9KHHVJXsBy/wLqBbglFZM6n/QYZ+2nf4bWWTRfmukRb2uwSFsxYrXLZ5 2/lurhyDog06LkUyuybMUPcnVtWewFFxdVXPYVT9un6HalhiCpBv5VcdQcEq/0EHq52j WlH9QubBkKhXBrkKQR21AhHd9aKB0EvvVDn2CbMk4mooHs8HdEks71eOyf0uY9aoHDVX BzSg== X-Gm-Message-State: AOJu0Yy0PpqIDWb/Qc1QkwQWwcYiVLs4C+ZNhK4ez/X1UNZQVk9RYWZl Z2qpG0xemRk61QXz8IuYZHlqGtFbsb0viu0q6LLTTSsHVPRoT4IUFm1oVt3QjiKVygpIKXGcbqB ZwwyZFcmsSwtQNqBRkALDFt8uNmUiMndx5sYRs3etg6ZDW+bdMHdCv0f36/8zwq/ykM1jECY3Bc 0JAbMtqaw= X-Received: by 2002:ad4:5dcf:0:b0:681:5c5f:d3ca with SMTP id m15-20020ad45dcf000000b006815c5fd3camr3179505qvh.37.1705344627024; Mon, 15 Jan 2024 10:50:27 -0800 (PST) X-Google-Smtp-Source: AGHT+IGo7B5q7e/m8avYQGnM2y2bP9eZex79tA3PyuL1QNykKUWTmIUmw+gA2Uq4QCnu5//dxjh9Fg== X-Received: by 2002:ad4:5dcf:0:b0:681:5c5f:d3ca with SMTP id m15-20020ad45dcf000000b006815c5fd3camr3179494qvh.37.1705344626542; Mon, 15 Jan 2024 10:50:26 -0800 (PST) Received: from localhost.localdomain (ool-457670bb.dyn.optonline.net. [69.118.112.187]) by smtp.gmail.com with ESMTPSA id mk11-20020a056214580b00b0067ef55ded84sm3483749qvb.106.2024.01.15.10.50.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 15 Jan 2024 10:50:25 -0800 (PST) From: Patrick Palka To: gcc-patches@gcc.gnu.org Cc: libstdc++@gcc.gnu.org, Patrick Palka Subject: [PATCH] libstdc++: Implement P2836R1 changes to const_iterator Date: Mon, 15 Jan 2024 13:49:20 -0500 Message-ID: <20240115184920.2752407-1-ppalka@redhat.com> X-Mailer: git-send-email 2.43.0.334.gd4dbce1db5 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-13.6 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, RCVD_IN_SORBS_WEB, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=unavailable 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.30 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gcc-patches-bounces+incoming=patchwork.ozlabs.org@gcc.gnu.org Tested on x86_64-pc-linux-gnu, does this look OK for trunk/13? libstdc++-v3/ChangeLog: * include/bits/stl_iterator.h (const_iterator): Define conversion operators as per P2836R1. * include/bits/version.def (ranges_as_const): Update value. * include/bits/version.h: Regenerate. * testsuite/24_iterators/const_iterator/1.cc (test04): New test. * testsuite/std/ranges/adaptors/as_const/1.cc: Adjust expected value of __cpp_lib_ranges_as_const. * testsuite/std/ranges/version_c++23.cc: Likewise. --- libstdc++-v3/include/bits/stl_iterator.h | 12 ++++++++++ libstdc++-v3/include/bits/version.def | 2 +- libstdc++-v3/include/bits/version.h | 4 ++-- .../24_iterators/const_iterator/1.cc | 22 +++++++++++++++++++ .../std/ranges/adaptors/as_const/1.cc | 2 +- .../testsuite/std/ranges/version_c++23.cc | 2 +- 6 files changed, 39 insertions(+), 5 deletions(-) diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h index 6434ef64750..d71a793e10d 100644 --- a/libstdc++-v3/include/bits/stl_iterator.h +++ b/libstdc++-v3/include/bits/stl_iterator.h @@ -2775,6 +2775,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION noexcept(noexcept(_M_current == __s)) { return _M_current == __s; } + template<__detail::__not_a_const_iterator _CIt> + requires __detail::__constant_iterator<_CIt> && convertible_to<_It, _CIt> + constexpr + operator _CIt() const& + { return _M_current; } + + template<__detail::__not_a_const_iterator _CIt> + requires __detail::__constant_iterator<_CIt> && convertible_to<_It, _CIt> + constexpr + operator _CIt() && + { return std::move(_M_current); } + constexpr bool operator<(const basic_const_iterator& __y) const noexcept(noexcept(_M_current < __y._M_current)) diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def index 21cdc65121b..afbec6c3e6a 100644 --- a/libstdc++-v3/include/bits/version.def +++ b/libstdc++-v3/include/bits/version.def @@ -1548,7 +1548,7 @@ ftms = { ftms = { name = ranges_as_const; values = { - v = 202207; + v = 202311; cxxmin = 23; }; }; diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h index f8dd16416a4..9688b246ef4 100644 --- a/libstdc++-v3/include/bits/version.h +++ b/libstdc++-v3/include/bits/version.h @@ -1875,9 +1875,9 @@ // from version.def line 1549 #if !defined(__cpp_lib_ranges_as_const) # if (__cplusplus >= 202100L) -# define __glibcxx_ranges_as_const 202207L +# define __glibcxx_ranges_as_const 202311L # if defined(__glibcxx_want_all) || defined(__glibcxx_want_ranges_as_const) -# define __cpp_lib_ranges_as_const 202207L +# define __cpp_lib_ranges_as_const 202311L # endif # endif #endif /* !defined(__cpp_lib_ranges_as_const) && defined(__glibcxx_want_ranges_as_const) */ diff --git a/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc b/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc index 8b74d110fdf..fe952bfad14 100644 --- a/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc +++ b/libstdc++-v3/testsuite/24_iterators/const_iterator/1.cc @@ -1,6 +1,7 @@ // { dg-do run { target c++23 } } #include +#include #include #include #include @@ -97,6 +98,26 @@ test03() std::unreachable_sentinel_t> ); } +void +test04() +{ + // Example from P2836R1 + auto f = [](std::vector::const_iterator i) {}; + + auto v = std::vector(); + { + auto i1 = ranges::cbegin(v); // returns vector::const_iterator + f(i1); // okay + } + + auto t = v | std::views::take_while([](int const x) { return x < 100; }); + { + auto i2 = ranges::cbegin(t); // returns basic_const_iterator::iterator> + f(i2); // was an error in C++23 before P2836R1 + f(std::move(i2)); // same + } +} + int main() { @@ -136,4 +157,5 @@ main() test02, true>(); test03(); + test04(); } diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc index 2d36e0a4712..c36786a8c5f 100644 --- a/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/as_const/1.cc @@ -3,7 +3,7 @@ #include -#if __cpp_lib_ranges_as_const != 202207L +#if __cpp_lib_ranges_as_const != 202311L # error "Feature-test macro __cpp_lib_ranges_as_const has wrong value in " #endif diff --git a/libstdc++-v3/testsuite/std/ranges/version_c++23.cc b/libstdc++-v3/testsuite/std/ranges/version_c++23.cc index 823264f32aa..d475d3dc114 100644 --- a/libstdc++-v3/testsuite/std/ranges/version_c++23.cc +++ b/libstdc++-v3/testsuite/std/ranges/version_c++23.cc @@ -45,7 +45,7 @@ # error "Feature-test macro __cpp_lib_ranges_as_rvalue has wrong value in " #endif -#if __cpp_lib_ranges_as_const != 202207L +#if __cpp_lib_ranges_as_const != 202311L # error "Feature-test macro __cpp_lib_ranges_as_const has wrong value in " #endif