The order of evaluation of function arguments is unspecified. This means that for a function that takes the arguments (a, b, c), any permutation of this set is a valid argument evaluation sequence. To demonstrate that, you could write a function f() and call it like this:
bool x; //global f( g(false), 1, x, 3);
Suppose that g(false) changes the value of x. You cannot tell which value of x is passed to f() as its third argument–it could be either the value of x before or after the call to g(false). Therefore, you should avoid writing code that relies on a specific evaluation order of function arguments, as it is bad programming practice.