A pair of expressions separated by a comma is evaluated left-to-right;
the left expression is
a discarded-value expression.
The left expression is sequenced before
the right expression ([intro.execution]).
The type and value of the
result are the type and value of the right operand; the result is of the same
value category as its right operand, and is a bit-field if its
right operand is a bit-field.
In contexts where the comma token is given special meaning
(e.g., function calls ([expr.call]),
subscript expressions ([expr.sub]),
lists of initializers ([dcl.init]),
or template-argument-lists ([temp.names])),
the comma operator as described in this subclause can appear only in parentheses.