q = ++p++; it won't even compile in C or in C ++
The post increment statement has a higher precedence than the pre increment statement
So, q= ++p++interpreted as q = ++(p++). Now the post increment statement returns an expression rvalue, while the preincrement statement requires its operand to be lvalue.
ISO C99 (Section 6.5.3.1/1)
Constraints
lvalue.