------- Comment #3 from janis at gcc dot gnu dot org 2008-09-17 17:02 ------- This is twisting my brain, but in this simplified testcase: __PTRDIFF_TYPE__ p; short q; void foo () { ((char *)p)++; } void bar () { ((char *)q)++; } we get an error with both -m32 and-m64 for foo but not for bar: elm3b149% /home/janis/tools/gcc-trunk-anonsvn/bin/g++ -c -m32 z.C z.C: In function ‘void foo()’: z.C:3: error: lvalue required as increment operand elm3b149% /home/janis/tools/gcc-trunk-anonsvn/bin/g++ -c -m64 z.C z.C: In function ‘void foo()’: z.C:3: error: lvalue required as increment operand although the expression "(char *)q" in bar is not an lvalue. What am I missing? -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37561