関数の呼び出し順番

C++で、下記のプログラムを書いたところ、DebugビルドとReleaseビルドで結果が異なった。
関数の引数において、その引数の式が呼ばれる順番は不定だったと記憶している。
が、計算式でまでそうだとは…。
やっぱり内部でカウンター持つような関数は使うもんじゃないね。

return ((rand() & 0x000000FF) << 24)
| ((rand() & 0x000000FF) << 16)
| ((rand() & 0x000000FF) << 8)
| ((rand() & 0x000000FF) << 0)
;