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.