https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102967
--- Comment #7 from Martin Sebor <msebor at gcc dot gnu.org> --- Both for the purposes of the warning (which can be more restrictive than what the language considers valid), and in the C language, the semantics of the -> expression depend on the first operand designating an object. In C they're defined like so: A postfix expression followed by the -> operator and an identifier designates a member of a structure or union object. The value is that of the named member of the object to which the first expression points, and is an lvalue. 106) Footnote 106) If &E is a valid pointer expression (where & is the "address-of" operator, which generates a pointer to its operand), the expression (&E)->MOS is the same as E.MOS .