/*******************************************************/
 #define MAX(x,y) ((x)>(y) ? (x):(y))
 int a = 3;
 int b = 3;
 int m = MAX(a,++b);
はプリプロセッサによって
 int a = 3;
 int b = 3;
 int m = ((a)>(++b) ? (a):(++b));
と展開されます。
結果的に++bが2度評価され、bとmは5になってしまいます。
/*******************************************************/
という記述を見たのですが、標準C++の規格ではbとmは5になるってのは保証されますか?
私には未定義の動作になりそうに見えるのですが。

よろしくお願いします。