I have a fundamental question about C syntax. In my copy of MSVC++.NET,
int xx = 0; // definition
(xx=3) = 4; // compiles
xx=3=4; // does not compile, left operand must be an L value
my question is why *don't* I get an Lvalue error on the previous line. In no way did I expect "(xx=3)" to result in an L-value. I understand it's an R-value (i.e., can be the source of another assignment), didn't expect an L-value (i.e., corresponds to a memory location and can be the target of another assignment).
Is the rule always that (A=B) results in an L-Value with the same memory location as A? Is this consistent for all flavors/compilers of C, or is this a microsoft-ism.
I'm studying the C standard a little bit, so bonus points if you can reference the relevant content in the standard. Thanks very much for any thoughts.