Why isn't the result of this cast an lvalue?
I draw your attention to section 6.5.4 of the C99 specification, line 4, footnote 86, which states:
A cast does not yield an lvalue.
You have a cast.
The result is not an lvalue.
The ++
operator requires an lvalue.
Therefore your program is an error.