public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "cvs-commit at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug libstdc++/108827] [C++23] Implement P2387R3, Pipe support for user-defined range adaptors
Date: Thu, 17 Aug 2023 16:40:14 +0000	[thread overview]
Message-ID: <bug-108827-4-7m9WC8XFSU@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-108827-4@http.gcc.gnu.org/bugzilla/>

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108827

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppalka@gcc.gnu.org>:

https://gcc.gnu.org/g:4a6f3676e7dd9e73a822f4da634b037299f0d482

commit r14-3293-g4a6f3676e7dd9e73a822f4da634b037299f0d482
Author: Patrick Palka <ppalka@redhat.com>
Date:   Thu Aug 17 12:40:04 2023 -0400

    libstdc++: Convert _RangeAdaptorClosure into a CRTP base [PR108827]

    Using the CRTP idiom for this base class avoids bloating the size of a
    pipeline when adding distinct empty range adaptor closure objects to it,
    as detailed in section 4.1 of P2387R3.

    But it means we can no longer define its operator| overloads as hidden
    friends, since it'd mean each instantiation of _RangeAdaptorClosure
    introduces its own distinct set of hidden friends.  So e.g. for the
    outer | in

      x | (views::reverse | views::join)

    ADL would find 6 distinct hidden operator| friends:

      two from _RangeAdaptorClosure<_Reverse>
      two from _RangeAdaptorClosure<_Join>
      two from _RangeAdaptorClosure<_Pipe<_Reverse, _Join>>

    but we really only want to consider the last two.

    We avoid this issue by instead defining the operator| overloads at
    namespace scope alongside _RangeAdaptorClosure.  This should be fine
    because the only types defined in this namespace are _RangeAdaptorClosure,
    _RangeAdaptor, _Pipe and _Partial, so we don't have to worry about
    unintentional ADL.

    Reviewed-by: Jonathan Wakely <jwakely@redhat.com>

            PR libstdc++/108827

    libstdc++-v3/ChangeLog:

            * include/std/ranges (__adaptor::_RangeAdaptorClosure):
            Convert into a CRTP class template.  Move hidden operator|
            friends into namespace scope and adjust their constraints.
            (__closure::__is_range_adaptor_closure_fn): Define.
            (__closure::__is_range_adaptor_closure): Define.
            (__adaptor::_Partial): Adjust use of _RangeAdaptorClosure.
            (__adaptor::_Pipe): Likewise.
            (views::_All): Likewise.
            (views::_Join): Likewise.
            (views::_Common): Likewise.
            (views::_Reverse): Likewise.
            (views::_Elements): Likewise.
            (views::_Adjacent): Likewise.
            (views::_AsRvalue): Likewise.
            (views::_Enumerate): Likewise.
            (views::_AsConst): Likewise.
            * testsuite/std/ranges/adaptors/all.cc: Reinstate assertion
            expecting that adding empty range adaptor closure objects to a
            pipeline doesn't increase the size of a pipeline.

  parent reply	other threads:[~2023-08-17 16:40 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-02-16 18:05 [Bug libstdc++/108827] New: " ppalka at gcc dot gnu.org
2023-02-16 23:28 ` [Bug libstdc++/108827] " redi at gcc dot gnu.org
2023-04-18 11:23 ` cvs-commit at gcc dot gnu.org
2023-04-18 11:28 ` cvs-commit at gcc dot gnu.org
2023-08-17 16:40 ` cvs-commit at gcc dot gnu.org [this message]
2023-09-07 12:51 ` redi at gcc dot gnu.org
2024-01-13  4:02 ` cvs-commit at gcc dot gnu.org
2024-01-13  4:06 ` ppalka at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-108827-4-7m9WC8XFSU@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).