> *a^=*b^=*a^=*b;
Very disappointing

Even without that, this is a complete disaster if a and b happen to be pointing at the same location.