特殊な処理系はほっといて、結論は
inline void swap(int &a, int &b){ a^=b^=a^=b;}
がマクロの罠回避で最強ということでよろしいか?