https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114857
Bug ID: 114857
Summary: Pointer attributes and qualifiers are parsed in wrong
order
Product: gcc
Version: 14.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: luigighiron at gmail dot com
Target Milestone: ---
GCC accepts the following declaration:
int*const[[]]p=0;
And rejects the following declaration:
int*[[]]const p=0;
It seems that GCC expects the attributes of a pointer declarator to come after
the qualifiers. The standard specifies in the grammar that the attributes
should come before qualifiers and not after:
> ptr-operator:
> * attribute-specifier-seq opt cv-qualifier-seq opt
> & attribute-specifier-seq opt
> && attribute-specifier-seq opt
> nested-name-specifier * attribute-specifier-seq opt cv-qualifier-seq opt
Section 9.3.1 "General" [dcl.decl.general] Paragraph 5 ISO/IEC 14882:2020
The first declaration should be rejected and the second declaration should be
accepted. Clang and MSVC get this correct (though not EDG I think so Visual
Studio will show errors in the correct declarations and not in the incorrect
declarations), and GCC gets this correct with pointer to members but not with
normal pointers.