2 ms·
`E` is an lvalue --- a location that only becomes a load/store when it is converted to an rvalue or assigned to. `&` takes an lvalue and gives a pointer to that
by Ericson2314 7y ago
`E` is an lvalue --- a location that only becomes a load/store when it is converted to an rvalue or assigned to. `&` takes an lvalue and gives a pointer to that location, so `E` is eliminated without being converted to an rvalue or assigned to, so no harm done.
The real question if why have "lvalues" at all. If assignment always had to have a pointer on the left hand:
&a := ..., b := ...
rather than:
a = ..., , *b = ...
then this problem goes away.