Why does the following given expression invoke undefined behavior?
int i = 5;
i = (i,i++,i) + 1
My question is influenced by Als' question here
c++sequence-pointsundefined-behavior
Why does the following given expression invoke undefined behavior?
int i = 5;
i = (i,i++,i) + 1
My question is influenced by Als' question here
Best Answer
It isn't undefined.
Answered here for C, Sequence points and partial order
I think the same applies in C++ (and here's my response before I saw that link):
The comma operator introduces a sequence point (and constrains to some extent the order in which the expression must be evaluated - left before right), so:
i
are separated by a sequence point (the second comma).i
ini++
is separated from everything else by sequence points.i
by=
is not separated from the last occurrence ofi
in the expression, but that's OK because we're allowed to accessi
and modify it without an intervening sequence point, provided that the access is "to determine the value to be stored" (5/4).