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 and
every evaluation
B that does not occur within
F but
is evaluated on the same thread and as part of the same signal handler (if any),
either
A is sequenced before
B or
B is sequenced before
A. [
Note 7:
If
A and
B would not otherwise be sequenced then they are
indeterminately sequenced
. —
end note]
Several contexts in C++ cause evaluation of a function call, even
though no corresponding function call syntax appears in the translation
unit
. [
Example 4:
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
.