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 [216.205.24.124]) by sourceware.org (Postfix) with ESMTPS id 4706B3858013 for ; Tue, 19 Oct 2021 12:37:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4706B3858013 Received: from mail-vk1-f197.google.com (mail-vk1-f197.google.com [209.85.221.197]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-305-I3GSFHACNZOoL1J3O0I6tw-1; Tue, 19 Oct 2021 08:37:24 -0400 X-MC-Unique: I3GSFHACNZOoL1J3O0I6tw-1 Received: by mail-vk1-f197.google.com with SMTP id h18-20020a056122065200b002a47d200294so5469868vkp.10 for ; Tue, 19 Oct 2021 05:37:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=UHY60IE7ScJYka0idKrtWNuPisWhgGGSR1LPGo0o8w8=; b=k64cq4I4LfMo0G1dk5wLEjAeWwSIsBWWX3B/qku19tK0ZztJNzWjehWoHS8Vk7knSR +wvyKdVR2L+o5QM3MAOjgjKNW+XAdL1Bo4clb0iE4Szl/mK/be54vSmyf+4OiuXPwjJw a+U7+tnoPa0KJOA3xPMKJBVsypSR/xJHYdxaU5txAPXgdb6Iq9o74Eim1cD0VHCfA5uG ts1fSZWrthHYj3Lj0Ydh/Sgo5g1IrR3uYnk8O9JkthOlPiEfuHEyvdWamx5eHl0jRhVV XbWJZwbO/QrGEzmG2/iq768I7+Yj6h0K0pbN7dksdIyqRVDYEgpw1uJ/EiaJsSS87tRT 29rQ== X-Gm-Message-State: AOAM531VzcRBo7mJ9rxlYIjcTVaFpuRpVl68UjM83/P8qBQ6UD0vHXi2 D25rgbzP+dHyhAQN4NuDt8me9RSisUHzGf104JpMt03//2B98gboneR7UaIsqR1eAtDbecsDdFP ey1lvRJ76xvBz3CxnRMFaH8jhaIIlt9s= X-Received: by 2002:a9f:3399:: with SMTP id p25mr33183937uab.24.1634647044234; Tue, 19 Oct 2021 05:37:24 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyOK65wmTcf4IN03HTi80V170qswvcHqyxSAsCXPoSAcsheb+Ih1EwgtUzsDZL8+NdIHXFii1ligIZc2X3hdGg= X-Received: by 2002:a9f:3399:: with SMTP id p25mr33183898uab.24.1634647043908; Tue, 19 Oct 2021 05:37:23 -0700 (PDT) MIME-Version: 1.0 References: <20211019121704.1510908-1-ppalka@redhat.com> In-Reply-To: <20211019121704.1510908-1-ppalka@redhat.com> From: Jonathan Wakely Date: Tue, 19 Oct 2021 13:37:13 +0100 Message-ID: Subject: Re: [PATCH 1/2] libstdc++: Implement LWG 3523 changes to ranges::iota_view To: Patrick Palka Cc: gcc Patches , "libstdc++" X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-12.8 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_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: libstdc++@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libstdc++ mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Oct 2021 12:37:28 -0000 On Tue, 19 Oct 2021 at 13:18, Patrick Palka via Libstdc++ wrote: > > libstdc++-v3/ChangeLog: > > * include/std/ranges (iota_view::_Iterator): Befriend iota_view. > (iota_view::_Sentinel): Likewise. > (iota_view::iota_view): Add three overloads each taking an > iterator/sentinel pair as per LWG 3523. > * testsuite/std/ranges/iota/iota_view.cc (test06): New test. OK for trunk and gcc-11 (after some soak time), thanks. > --- > libstdc++-v3/include/std/ranges | 21 +++++++++++++++++++ > .../testsuite/std/ranges/iota/iota_view.cc | 21 +++++++++++++++++++ > 2 files changed, 42 insertions(+) > > diff --git a/libstdc++-v3/include/std/ranges b/libstdc++-v3/include/std/ranges > index b8de400dfbb..85f232d8fb9 100644 > --- a/libstdc++-v3/include/std/ranges > +++ b/libstdc++-v3/include/std/ranges > @@ -532,6 +532,7 @@ namespace ranges > private: > _Winc _M_value = _Winc(); > > + friend iota_view; > friend _Sentinel; > }; > > @@ -568,6 +569,8 @@ namespace ranges > operator-(const _Sentinel& __x, const _Iterator& __y) > requires sized_sentinel_for<_Bound, _Winc> > { return __x._M_distance_from(__y); } > + > + friend iota_view; > }; > > _Winc _M_value = _Winc(); > @@ -590,6 +593,24 @@ namespace ranges > __glibcxx_assert( bool(__value <= __bound) ); > } > > + constexpr > + iota_view(_Iterator __first, _Iterator __last) > + requires same_as<_Winc, _Bound> > + : iota_view(__first._M_value, __last._M_value) > + { } > + > + constexpr > + iota_view(_Iterator __first, unreachable_sentinel_t __last) > + requires same_as<_Bound, unreachable_sentinel_t> > + : iota_view(__first._M_value, __last) > + { } > + > + constexpr > + iota_view(_Iterator __first, _Sentinel __last) > + requires (!same_as<_Winc, _Bound>) && (!same_as<_Bound, unreachable_sentinel_t>) > + : iota_view(__first._M_value, __last._M_bound) > + { } > + > constexpr _Iterator > begin() const { return _Iterator{_M_value}; } > > diff --git a/libstdc++-v3/testsuite/std/ranges/iota/iota_view.cc b/libstdc++-v3/testsuite/std/ranges/iota/iota_view.cc > index 362ef1f7f78..5bebe4be693 100644 > --- a/libstdc++-v3/testsuite/std/ranges/iota/iota_view.cc > +++ b/libstdc++-v3/testsuite/std/ranges/iota/iota_view.cc > @@ -18,6 +18,7 @@ > // { dg-options "-std=gnu++2a" } > // { dg-do run { target c++2a } } > > +#include > #include > #include > > @@ -90,6 +91,25 @@ test05() > VERIFY( r.begin() - r.end() == -3 ); > } > > +void > +test06() > +{ > + // Verify LWG 3523 changes. > + auto v1 = std::views::iota(0, 5); > + auto w1 = decltype(v1)(v1.begin(), v1.end()); > + VERIFY( std::ranges::equal(v1, w1) ); > + > + auto v2 = std::views::iota(0); > + auto w2 = decltype(v2)(v2.begin(), v2.end()); > + static_assert(std::same_as); > + VERIFY( *w2.begin() == 0 ); > + > + auto v3 = std::views::iota(0, 5l); > + auto w3 = decltype(v3)(v3.begin(), v3.end()); > + static_assert(!std::ranges::common_range); > + VERIFY( std::ranges::equal(v3, w3) ); > +} > + > int > main() > { > @@ -98,4 +118,5 @@ main() > test03(); > test04(); > test05(); > + test06(); > } > -- > 2.33.1.637.gf443b226ca >