<i>Everything not defined in the spec represents undefined behavior, not just the things explicitly disclaimed as undefined. Not every instance of undefined behavior has explicit handling in a compiler; sometimes, undefined behavior occurs as part of the implicit functioning of the compiler implementation.</i><p>The C and C++ standards make clear separations between &quot;undefined behavior&quot;, &quot;unspecified behavior&quot;, and &quot;implementation defined behavior&quot;.<p>Order of argument evaluation is not undefined behavior, it&#x27;s unspecified behavior. A standard-compliant implementation can choose any order it wants in any instance, it doesn&#x27;t have to document this behavior, but it <i>does</i> have to produce output consistent with <i>some</i> ordering. It can&#x27;t erase your hard disk or launch the nuclear missiles, which it could do if it encountered undefined behavior.