/ the following nonsense is required
because casts turn an Lvalue
into an Rvalue so two cheats
are necessary, one for each context.
*/
union { int _cheat;};
#define Lcheat(a) ((a)._cheat)
#define Rcheat(a) ((int)(a))
Found in the
sh source code of 32V UNIX, which is written in the (in)famous BOURNEGOL, an Algol derivate based on C.