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

            Bug ID: 119463
           Summary: Wrong diagnostics about unnecessary parentheses or
                    acceptance of invalid code
           Product: gcc
           Version: 14.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fchelnokov at gmail dot com
  Target Milestone: ---

This valid program
```
using A = int;
struct B { int b; };
A(::B::* x) = &B::b;
```
makes GCC emit the
> warning: unnecessary parentheses in declaration of 'x' [-Wparentheses]
> note: remove parentheses
>    3 | A(::B::* x) = &B::b;
>      |  ^~~~~~~~~~
Online demo: https://gcc.godbolt.org/z/easrY9sdo

However, it looks wrong, since if the parentheses are removed:
```
using A = int;
struct B { int b; };
A::B::* x = &B::b;
```
then the program is rejected by Clang, EDG and MSVC, but GCC accepts it just
fine (found by my сolleague Egor).
Online demo: https://gcc.godbolt.org/z/aPsn7Wsxb

Reply via email to