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 c++/106651] [C++23] P1169 - static operator()
Date: Tue, 27 Sep 2022 06:41:49 +0000	[thread overview]
Message-ID: <bug-106651-4-bpgZdJqfY2@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-106651-4@http.gcc.gnu.org/bugzilla/>

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

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

https://gcc.gnu.org/g:303976a6076f2839354702fd2caa049fa7cbbdc2

commit r13-2892-g303976a6076f2839354702fd2caa049fa7cbbdc2
Author: Jakub Jelinek <jakub@redhat.com>
Date:   Tue Sep 27 08:36:28 2022 +0200

    c++: Implement C++23 P1169R4 - static operator() [PR106651]

    The following patch attempts to implement C++23 P1169R4 - static operator()
    paper's compiler side (there is some small library side too not implemented
    yet).  This allows static members as user operator() declarations and
    static specifier on lambdas without lambda capture.
    The synthetized conversion operator changes for static lambdas as it can
just
    return the operator() static method address, doesn't need to create a thunk
    for it.
    The change in call.cc (joust) is to avoid ICEs because we assumed that len
    could be different only if both candidates are direct calls but it can be
    one direct and one indirect call, and to implement the
    [over.match.best.general]/1 and [over.best.ics.general] changes from
    the paper (implemented always as Jason is sure it doesn't make a difference
    in C++20 and earlier unless static member function operator() or
    static lambda which we accept with pedwarn in earlier standards too appears
    and my testing confirmed that).

    2022-09-27  Jakub Jelinek  <jakub@redhat.com>

            PR c++/106651
    gcc/c-family/
            * c-cppbuiltin.cc (c_cpp_builtins): Predefine
            __cpp_static_call_operator=202207L for C++23.
    gcc/cp/
            * cp-tree.h (LAMBDA_EXPR_STATIC_P): Implement C++23
            P1169R4 - static operator().  Define.
            * parser.cc (CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR): Document
            that it also allows static.
            (cp_parser_lambda_declarator_opt): Handle static lambda specifier.
            (cp_parser_decl_specifier_seq): Allow RID_STATIC for
            CP_PARSER_FLAGS_ONLY_MUTABLE_OR_CONSTEXPR.
            * decl.cc (grok_op_properties): If operator() isn't a method,
            use a different error wording, if it is static member function,
            allow it (for C++20 and older with a pedwarn unless it is
            a lambda function or template instantiation).
            * call.cc (joust): Don't ICE if one candidate is static member
            function and the other is an indirect call.  If the parameter
            conversion on the other candidate is user defined conversion,
            ellipsis or bad conversion, make static member function candidate
            a winner for that parameter.
            * lambda.cc (maybe_add_lambda_conv_op): Handle static lambdas.
            * error.cc (dump_lambda_function): Print static for static lambdas.
    gcc/testsuite/
            * g++.dg/template/error30.C: Adjust expected diagnostics.
            * g++.dg/cpp1z/constexpr-lambda13.C: Likewise.
            * g++.dg/cpp23/feat-cxx2b.C: Test __cpp_static_call_operator.
            * g++.dg/cpp23/static-operator-call1.C: New test.
            * g++.dg/cpp23/static-operator-call2.C: New test.
            * g++.old-deja/g++.jason/operator.C: Adjust expected diagnostics.

  parent reply	other threads:[~2022-09-27  6:41 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-16 17:11 [Bug c++/106651] New: " mpolacek at gcc dot gnu.org
2022-09-12 17:46 ` [Bug c++/106651] " jakub at gcc dot gnu.org
2022-09-13 13:18 ` jakub at gcc dot gnu.org
2022-09-27  6:41 ` cvs-commit at gcc dot gnu.org [this message]
2022-09-27 11:00 ` cvs-commit at gcc dot gnu.org
2022-09-27 11:00 ` redi at gcc dot gnu.org
2023-03-07 19:34 ` cvs-commit 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-106651-4-bpgZdJqfY2@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).