C++ では、引数の評価順序は不定

あろうことか、C++ では、関数呼び出しの際の引数を評価する順序が不定である*1。“f(g(), h())g よりも h が先に呼び出されるかもしれない”なんて思いもしなかった、ではダメなのだ((gh の呼び出しが f の呼び出しの前に完了していることは保証してくれている。引数の値が無きゃ関数呼び出せないんだから当たり前だろ、と思うかもしれないが、世の中には Haskell みたいな言語もある。))。残念ながら、C++ というのはそういう言語だ。

*1:Java では第1引数、第2引数、……、の順で評価されると決まっている。