When calling a function (whether or not the function is inline), every
value computation and
side effect associated with any argument
expression, or with the postfix expression designating the called
function, is sequenced before execution of every expression or statement
in the body of the called function.
For each function invocation F
for every evaluation A
that occurs within F
every evaluation B
that does not occur within F
is evaluated on the same thread and as part of the same signal handler (if any),
is sequenced before B
is sequenced before A.
would not otherwise be sequenced then they are
— end note
Several contexts in C++ cause evaluation of a function call, even
though no corresponding function call syntax appears in the translation
For another example,
invocation of a conversion function ([class.conv.fct]
) can arise in
contexts in which no function call syntax appears.
— end example
The sequencing constraints on the execution of the called function (as
described above) are features of the function calls as evaluated,
regardless of the syntax of the expression that calls the function.