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 2E0703858005 for ; Thu, 9 Mar 2023 17:54:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2E0703858005 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=1678384486; 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: in-reply-to:in-reply-to:references:references; bh=ee2Im1AIoMXnOGs+gEy1eACywp+vu6CnKll4Ev8NRbc=; b=gYUd+Lm7cNx37IS8s8eWzaf7NS/GS5zOlD9g15vwYAL+0DuNT/TWj/QzjfCVJgMw0gHi5J qEU3cTYY9SXP6sJNbUpdDFnY/6MGGonP3v/GORshV2JlCVmblOAN+LrGyhgbAABWWQ8u4W hXsYPE8cnAe2nCAL7H/B497ArPXyXts= Received: from mail-lj1-f198.google.com (mail-lj1-f198.google.com [209.85.208.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-568-brFdj3g0Nxqz4HAVOVq64A-1; Thu, 09 Mar 2023 12:54:45 -0500 X-MC-Unique: brFdj3g0Nxqz4HAVOVq64A-1 Received: by mail-lj1-f198.google.com with SMTP id d15-20020a05651c088f00b002934e8e57e2so846614ljq.10 for ; Thu, 09 Mar 2023 09:54:45 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678384484; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ee2Im1AIoMXnOGs+gEy1eACywp+vu6CnKll4Ev8NRbc=; b=iA2b5G5y9Iex+BEQTtL+9Turfu8miDPd2g35B3lfQp/z2M3WVDoyKVFLAD7SGk8qsQ ZQRSP/RoXD5w9ymHW8L65/JmrniBOmF5Pvqg5lA7LMWOGFWW4FVsx1tuAHMkp6HzBog0 PAAmU55FREiIPoAOIcTgoyIyZFu1rdS/wGbH3PLjjbxv/KVY/U+CS2nWTCglB226QyY8 sys54AFfrMXA+Wf8VIzn/fZmjbgPKOuGsefVi0zEpAAwKBCeDFRiNg9fQjVeaN68T8tN MdH+FSHgeEiSB1gG2qvq5vGjtQMRYa53QsSVRpsZNG3ElBQR7pweJPswLeJ+VATYDw9s i+Yg== X-Gm-Message-State: AO0yUKUX4/J55+iVCFo7jLbsD3VyRrFmfn2BeMcATAgYVFVxktWuusSD /ZJRsTD46dktlVSXVULICOZVWZbg+rIiyQd8RpHEYPa5KpEgZrm787iKaE66CcW3CssjLksVagU 5sFMZ6nUNS7UVxwNS5fNhobL5pEhE/r76e6xrtKnoyA== X-Received: by 2002:a05:651c:b93:b0:295:944c:f37e with SMTP id bg19-20020a05651c0b9300b00295944cf37emr7123087ljb.9.1678384484053; Thu, 09 Mar 2023 09:54:44 -0800 (PST) X-Google-Smtp-Source: AK7set/+YZP2lqnpjhYc5piq3EBKWs4fT8ZgY1+MgNcuw0fpXhvq9KW2zNvqQxqWOnp5zrMnEIV2ZEQ6MJ5gLC+VLW0= X-Received: by 2002:a05:651c:b93:b0:295:944c:f37e with SMTP id bg19-20020a05651c0b9300b00295944cf37emr7123083ljb.9.1678384483792; Thu, 09 Mar 2023 09:54:43 -0800 (PST) MIME-Version: 1.0 References: <20230308155306.257241-1-ppalka@redhat.com> In-Reply-To: <20230308155306.257241-1-ppalka@redhat.com> From: Jonathan Wakely Date: Thu, 9 Mar 2023 17:54:32 +0000 Message-ID: Subject: Re: [PATCH] libstdc++: Implement LWG 3715 changes to view_interface::empty To: Patrick Palka Cc: gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-12.0 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: On Wed, 8 Mar 2023 at 15:53, Patrick Palka via Libstdc++ wrote: > > Tested on x86_64-pc-linux-gnu, does this look OK for trunk? OK. I think this would make sense for 12 too. > > libstdc++-v3/ChangeLog: > > * include/bits/ranges_util.h (view_interface::empty): Add > preferred overloads that use ranges::size when the range is > sized as per LWG 3715. > * testsuite/std/ranges/adaptors/lwg3715.cc: New test. > --- > libstdc++-v3/include/bits/ranges_util.h | 16 +++++++-- > .../testsuite/std/ranges/adaptors/lwg3715.cc | 33 +++++++++++++++++++ > 2 files changed, 47 insertions(+), 2 deletions(-) > create mode 100644 libstdc++-v3/testsuite/std/ranges/adaptors/lwg3715.cc > > diff --git a/libstdc++-v3/include/bits/ranges_util.h b/libstdc++-v3/include/bits/ranges_util.h > index e4643e31a20..880a0ce0143 100644 > --- a/libstdc++-v3/include/bits/ranges_util.h > +++ b/libstdc++-v3/include/bits/ranges_util.h > @@ -97,15 +97,27 @@ namespace ranges > constexpr bool > empty() > noexcept(noexcept(_S_empty(_M_derived()))) > - requires forward_range<_Derived> > + requires forward_range<_Derived> && (!sized_range<_Derived>) > { return _S_empty(_M_derived()); } > > + constexpr bool > + empty() > + noexcept(noexcept(ranges::size(_M_derived()) == 0)) > + requires sized_range<_Derived> > + { return ranges::size(_M_derived()) == 0; } > + > constexpr bool > empty() const > noexcept(noexcept(_S_empty(_M_derived()))) > - requires forward_range > + requires forward_range && (!sized_range) > { return _S_empty(_M_derived()); } > > + constexpr bool > + empty() const > + noexcept(noexcept(ranges::size(_M_derived()) == 0)) > + requires sized_range > + { return ranges::size(_M_derived()) == 0; } > + > constexpr explicit > operator bool() noexcept(noexcept(ranges::empty(_M_derived()))) > requires requires { ranges::empty(_M_derived()); } > diff --git a/libstdc++-v3/testsuite/std/ranges/adaptors/lwg3715.cc b/libstdc++-v3/testsuite/std/ranges/adaptors/lwg3715.cc > new file mode 100644 > index 00000000000..96ee7087be0 > --- /dev/null > +++ b/libstdc++-v3/testsuite/std/ranges/adaptors/lwg3715.cc > @@ -0,0 +1,33 @@ > +// { dg-options "-std=gnu++23" } > +// { dg-do run { target c++23 } } > + > +// Verify LWG 3715 changes. > + > +#include > +#include > +#include > + > +void > +test01() > +{ > + std::istringstream ints("0 1 2 3 4"); > + auto i = std::views::istream(ints); > + auto r4 = std::views::counted(i.begin(), 4) | std::views::chunk(2); > + VERIFY( !r4.empty() ); > +} > + > +void > +test02() > +{ > + std::istringstream ints("0 1 2 3 4"); > + auto i = std::views::istream(ints); > + auto r0 = std::views::counted(i.begin(), 0) | std::views::chunk(2); > + VERIFY( r0.empty() ); > +} > + > +int > +main() > +{ > + test01(); > + test02(); > +} > -- > 2.40.0.rc0.57.g454dfcbddf >