http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57647
--- Comment #7 from vijay Nag <vijunag at gmail dot com> --- (In reply to vijay Nag from comment #6) > (In reply to Andreas Schwab from comment #5) > > ((unsigned long*)foo)++ and ((unsigned long *)foo++) are not equivalent > > expressions. The former is the same as foo = (char *)((unsigned long*)foo + > > 1), the latter is foo += sizeof(*foo) (and the cast has no effect). > ((unsigned long*)foo)++ is no longer a valid C expression for the cast evaluates it to be an R-value rather than L-value. Why is the second expression evaluating as foo += sizeof(*foo) ? ()(parentheses) comes before ++(postfix) although they both have the same precedence but associativity is from left to right.