I'm trying to get this to work:

int k=1;
assert(k^(k=0));

but it seems like the VC2003 compiler is assigning k first no matter which side i put it. When I do this however:

int k=1,j=0;
assert((j=k)^(k=0));

it evidently assigns k after evaluating the left side. Is this standard? Is there any way around it without using another variable?