http://gcc.gnu.org/bugzilla/show_bug.cgi?id=51731
--- Comment #5 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-01-02 19:32:08 UTC --- (In reply to comment #4) > Following your logic, if I rewrite the code from: > > return data.e[-1]; > > to > > int* ep = data.e; > return ep[-1]; > > It would be valid, right? And you still believe the bug report is > invalid? Of course that wouldn't be valid. I meant that if you had say array type e[10]; somewhere and type *ep = data.e + 9; you can then access ep[0] + ep[-1] + ep[-9] In C++03, please read [expr.add]/5 : "If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined."