public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "ky4ct at arrl dot net" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/107278] fails to correctly parse template default function declarations.
Date: Sun, 16 Oct 2022 15:47:25 +0000	[thread overview]
Message-ID: <bug-107278-4-BoqTSUKZWi@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-107278-4@http.gcc.gnu.org/bugzilla/>

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

Jonathan <ky4ct at arrl dot net> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|RESOLVED                    |CLOSED

--- Comment #8 from Jonathan <ky4ct at arrl dot net> ---
Proposed resolution (November, 2017)

    Change 11.4.5 [class.ctor] paragraph 1 as follows:

        ...and the id-expression has one of the following forms:

            in a member-declaration that belongs to the member-specification of
a class or class template but is not a friend declaration (11.8.4
[class.friend]), the id-expression is the injected-class-name ( Clause 11
[class]) of the immediately-enclosing class; entity or

            in a member-declaration that belongs to the member-specification of
a class template but is not a friend declaration, the id-expression is a
class-name that names the current instantiation (13.8.3.2 [temp.dep.type]) of
the immediately-enclosing class template; or

            in a declaration at namespace scope or in a friend declaration, the
id-expression is a qualified-id that names a constructor (6.5.5.2
[class.qual]).

    Change 11.4.7 [class.dtor] paragraph 1 as follows:

        ...and the id-expression has one of the following forms:

            in a member-declaration that belongs to the member-specification of
a class or class template but is not a friend declaration (11.8.4
[class.friend]), the id-expression is ~class-name and the class-name is the
injected-class-name (Clause 11 [class]) of the immediately-enclosing class;
entity or

            in a member-declaration that belongs to the member-specification of
a class template but is not a friend declaration, the id-expression is
~class-name and the class-name names the current instantiation (13.8.3.2
[temp.dep.type]) of the immediately-enclosing class template; or

            in a declaration at namespace scope or in a friend declaration, the
id-expression is nested-name-specifier ~class-name and the class-name names the
same class as the nested-name-specifier.

    Add the following as a new paragraph in C.2 [diff.cpp17]:

        C.5.x Clause 15: Special member functions [diff.cpp17.special]

        Affected subclauses: 11.4.5 [class.ctor], 11.4.7 [class.dtor]
        Change: A simple-template-id is no longer valid as the declarator-id of
a constructor or destructor.
        Rationale: Remove potentially error-prone option for redundancy.
        Effect on original feature: Valid C++ 2017 code may fail to compile.

          template<class T>
          struct A {
            A<T>();  // error: simple-template-id not allowed for constructor
            A(int);  // OK, injected-class-name used
            ~A<T>(); // error: simple-template-id not allowed for destructor
          };

(Note that this resolution is a change for C++20, NOT a defect report against
C++17 and earlier versions.)

      parent reply	other threads:[~2022-10-16 15:47 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-16 14:42 [Bug c++/107278] New: " ky4ct at arrl dot net
2022-10-16 15:16 ` [Bug c++/107278] " pinskia at gcc dot gnu.org
2022-10-16 15:24 ` ky4ct at arrl dot net
2022-10-16 15:26 ` ky4ct at arrl dot net
2022-10-16 15:27 ` pinskia at gcc dot gnu.org
2022-10-16 15:29 ` ky4ct at arrl dot net
2022-10-16 15:42 ` pinskia at gcc dot gnu.org
2022-10-16 15:44 ` pinskia at gcc dot gnu.org
2022-10-16 15:47 ` ky4ct at arrl dot net [this message]

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-107278-4-BoqTSUKZWi@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).