In the 6.2.1 Results section page on 84 chapter for of the C++ programming language by Bjarne Stroustrup:
int* p = &++x; // p points to x int* q = &(x++); // error: x++ is not an lvalue (it is not the value stored in x)
Why is the second statement's x++ not an lvalue?
According to the precedence chart, both postfix and prefix unary increment operators are executed before the address operator, and until the sequence point is reached(semicolon in both cases) the side-effect is executed(x+=1.)
In other words, if the first statement's x is considered an lvalue, so should the second statment's x.
It would seem that x++ leaves the rvalue(whatever literal value x refers to, AKA referent) while ++x leaves the lvalue(referer) as the immediate evaluation.