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
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
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 in i++ is separated from everything else by sequence points.i by = is not separated from the last occurrence of i in the expression, but that's OK because we're allowed to access i and modify it without an intervening sequence point, provided that the access is "to determine the value to be stored" (5/4). 
    
     
    
    Because it isn't defined in the standard which of the post-increment or the assignment will take place first; it is left to the compiler implementation to decide their order.
 
    
    It is undefined in C++ to assign an incremented value to itself:
i = i++
What should i be after this? Should it be the previous value or one plus the previous value? The order of execution is left to the compiler, so different platforms will have different results.
