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 115A73858D20 for ; Fri, 11 Aug 2023 00:03:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 115A73858D20 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=1691712230; 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=2jxuNL5iIqOaQRPgVZVGXmJdBMviuGdZXTU+XRt+XsY=; b=aQEPR8PYgpnF1kDy74XOqc35E8/Qkm3J9JXcLqE0pWNm5rUmlWjNGAPnNUKP7IFKICb6XF nbjYMw58TKZV7t9DcinRo6z+mgXJauyevMIJSuf47zZ/dQKdVGmGtP49F3q3ypLgk1c/HB NBXw2kQtQxZTVoSwp0XplZVdon4x73c= 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-414-SDU9HmGdOymxpk6IGELtWw-1; Thu, 10 Aug 2023 20:03:48 -0400 X-MC-Unique: SDU9HmGdOymxpk6IGELtWw-1 Received: by mail-lj1-f198.google.com with SMTP id 38308e7fff4ca-2b9f0b7af1cso15837841fa.3 for ; Thu, 10 Aug 2023 17:03:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691712227; x=1692317027; 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=2jxuNL5iIqOaQRPgVZVGXmJdBMviuGdZXTU+XRt+XsY=; b=R5zWxRI6lAYgDMkH3FdAvQ9r4lfjYWrWfEpqdT2fZaBQ2OjZL3gP8fvcsT0wuTp7DU kr/EXwBFhVpMvhP9pW5R5BCzgnTNFqVHv1Dry9CQPZvpxXwMJWvtD8Ig38Sv65paDbML vCJpP9qWA2ZOlismTL2lTvCN+HC9gMk0G3xIOaOqORGsrht83jGftEyHPsh9s+9mDKGb 2QRf5aVmlwYWOs7uIprYNc4OEHKTTSRnaGzj9MK3QkaoPXWHnwenppylGF3QWw7kppRh 7PnAiynz/mxLcfmaGZ+Ear4XuxshxeThAJlbKaG0PPpaZn+Km8IsW4++0AjOoiNO0Ndl A4lg== X-Gm-Message-State: AOJu0Yy6bPEZUFIHjf5eDJDcTVrpw+xstQ/9Wi75FItU4tDfVJfEGX87 0x4Hx1AkS9BXU5p93yPCFb5uXVHs+2f6ytoNCHPa9h2WYE5LDRuWZ5ZtGkjM8Y+L5ZOSEVb7B0L T5itw1brEeIpLnHJ7Zvnnwu4d8c4rM80= X-Received: by 2002:a2e:9c18:0:b0:2b5:9d78:213e with SMTP id s24-20020a2e9c18000000b002b59d78213emr441859lji.22.1691712227273; Thu, 10 Aug 2023 17:03:47 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHAZPDsz/1+w73Z7uQyL1ERupfqc81IB82dvL5xyW0wh/z0tDFB3aw56EAMIk8i1gCVMnzHQay7FcO1w08ZFoE= X-Received: by 2002:a2e:9c18:0:b0:2b5:9d78:213e with SMTP id s24-20020a2e9c18000000b002b59d78213emr441841lji.22.1691712226850; Thu, 10 Aug 2023 17:03:46 -0700 (PDT) MIME-Version: 1.0 References: <20230810223344.1242452-1-jwakely@redhat.com> In-Reply-To: <20230810223344.1242452-1-jwakely@redhat.com> From: Jonathan Wakely Date: Fri, 11 Aug 2023 01:03:35 +0100 Message-ID: Subject: Re: [committed] libstdc++: Use alias template for iterator_category [PR110970] To: Jonathan Wakely Cc: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/alternative; boundary="00000000000058121706029a7258" 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,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,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: --00000000000058121706029a7258 Content-Type: text/plain; charset="UTF-8" On Thu, 10 Aug 2023 at 23:34, Jonathan Wakely via Libstdc++ < libstdc++@gcc.gnu.org> wrote: > Tested x86_64-linux. Pushed to trunk. Backport to gcc-13 to follow. > > -- >8 -- > > This renames __iterator_category_t to __iter_category_t, for consistency > with std::iter_value_t, std::iter_difference_t and std::iter_reference_t > in C++20. Then use __iter_category_t in , which > fixes the problem of the missing 'typename' that Clang 15 incorrectly > still requires. > > libstdc++-v3/ChangeLog: > > PR libstdc++/110970 > * include/bits/stl_iterator.h (__detail::__move_iter_cat): Use > __iter_category_t. > (iterator_traits>::_S_iter_cat): Likewise. > (__detail::__basic_const_iterator_iter_cat): Likewise. > * include/bits/stl_iterator_base_types.h (__iterator_category_t): > Rename to __iter_category_t. > --- > libstdc++-v3/include/bits/stl_iterator.h | 17 +++++++++-------- > .../include/bits/stl_iterator_base_types.h | 6 +++--- > 2 files changed, 12 insertions(+), 11 deletions(-) > > diff --git a/libstdc++-v3/include/bits/stl_iterator.h > b/libstdc++-v3/include/bits/stl_iterator.h > index b22d9a4fdb3..d5ba05f3e22 100644 > --- a/libstdc++-v3/include/bits/stl_iterator.h > +++ b/libstdc++-v3/include/bits/stl_iterator.h > @@ -103,6 +103,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > using __clamp_iter_cat > = __conditional_t, _Limit, _Otherwise>; > > + template > + using __clamped_iter_cat_t > + = __clamp_iter_cat<__iter_category_t<_Iter>, _Limit>; > + > template > concept __different_from > = !same_as, remove_cvref_t<_Up>>; > @@ -168,8 +172,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > random_access_iterator_tag, > bidirectional_iterator_tag>; > using iterator_category > - = __detail::__clamp_iter_cat __traits_type::iterator_category, > - random_access_iterator_tag>; > + = __detail::__clamped_iter_cat_t<_Iterator, > random_access_iterator_tag>; > using value_type = iter_value_t<_Iterator>; > using difference_type = iter_difference_t<_Iterator>; > using reference = iter_reference_t<_Iterator>; > @@ -1426,12 +1429,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > { }; > > template > - requires requires { typename > iterator_traits<_Iterator>::iterator_category; } > + requires requires { typename __iter_category_t<_Iterator>; } > struct __move_iter_cat<_Iterator> > { > using iterator_category > - = __clamp_iter_cat iterator_traits<_Iterator>::iterator_category, > - random_access_iterator_tag>; > + = __clamped_iter_cat_t<_Iterator, random_access_iterator_tag>; > Oops, I only meant to commit the change to use __iter_category_t, not the addition of __clamped_iter_cat. I'll revert that part. It was an experiment that I decided against, and I thought I'd already reverted before committing. > }; > #endif > } > @@ -2288,8 +2290,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > static auto > _S_iter_cat() > { > - using _Traits = iterator_traits<_It>; > - if constexpr (requires { requires derived_from _Traits::iterator_category, > + if constexpr (requires { requires > derived_from<__iter_category_t<_It>, > > forward_iterator_tag>; }) > return forward_iterator_tag{}; > else > @@ -2615,7 +2616,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > > template > struct __basic_const_iterator_iter_cat<_It> > - { using iterator_category = > iterator_traits<_It>::iterator_category; }; > + { using iterator_category = __iter_category_t<_It>; }; > } // namespace detail > > template > diff --git a/libstdc++-v3/include/bits/stl_iterator_base_types.h > b/libstdc++-v3/include/bits/stl_iterator_base_types.h > index 5d2c8b325d9..841b5eca3ad 100644 > --- a/libstdc++-v3/include/bits/stl_iterator_base_types.h > +++ b/libstdc++-v3/include/bits/stl_iterator_base_types.h > @@ -243,16 +243,16 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION > > #if __cplusplus >= 201103L > template > - using __iterator_category_t > + using __iter_category_t > = typename iterator_traits<_Iter>::iterator_category; > > template > using _RequireInputIter = > - __enable_if_t, > + __enable_if_t, > input_iterator_tag>::value>; > > template - typename _Cat = __iterator_category_t<_It>> > + typename _Cat = __iter_category_t<_It>> > struct __is_random_access_iter > : is_base_of > { > -- > 2.41.0 > > --00000000000058121706029a7258--