C言語の解説書などでよく見る

  #define SWAP(a, b) (a += b, b = a - b, a -= b)
  これは、同じ値を交換しようとすると誤作動する

というもの、自身で計算してみたりプログラムを書いてみたりしてみたのですが、どうにも誤作動を起こしていないように思うんです。

 a b
10 10 SWAP(10,10)
20 10 a += b
20 10 b = a - b
10 10 a -= b

この計算のどこに間違いがあるのでしょうか。