まあ、常識みたいなもんかもしれませんが、今かこうと思った。 void swap(signed &l,signed &r){ l ^= r; // L = R XOR L r ^= l; // R = R XOR (R XOR L) = (R XOR R) XOR L = 0 XOR L = L l ^= r; // L = L XOR R = (R XOR L) XOR (L) = R XOR (L XOR L) = R XOR 0 = R } こうするべきなのか? template <typename T> void swap(T &l,T &r){ l ^= r; r ^= l; l ^= r; } こうか? template <typename T> void swap(T &l,T &r){ l ^= r ^= l ^= r; // 副作用完了点とか未定義とかどうだったっけ } も