These standards are that way because older languages (specifically C and C++) have unspecified evaluation orders for arguments, so multiple argument expressions with conflicting side-effects are non-portable.
Here the expressions are pure, OoE has nothing whatsoever to do with the issue.