In general, in C++, the order of evaluation of subexpressions is unspecified. Check out the link for more discussion, and some exceptional cases.
The C++ standard says:
Except where noted, evaluations of operands of individual operators
and of subexpressions of individual expressions are unsequenced.[…]
The compiler may decide which argument of print
(in your example) to evaluate first, based on efficiency or some other considerations. You should never rely on the order.
solved Expression evaluation problems in C++