statement, statement, .... statement
Basically, these are comma separated statements. Take note that unlike the C/C++ semicolon, the comma is a separator put in-between statements. This is like Pascal's semicolon separator, rather than C/C++'s semicolon terminator. For example:
statement, statement, statement, // ERROR!
Is an error. The last statement should not have a comma. Block statements can be grouped using the parentheses. Again, the last statement in a group should not have a trailing comma.
statement, statement, ( statement, statement ), statement
Outside the square brackets, block statements should be grouped. For example:
std::for_each(c.begin(), c.end(), ( do_this(arg1), do_that(arg1) ) );
Wrapping a comma operator chain around a parentheses pair blocks the interpretation as an argument separator. The reason for the exception for the square bracket operator is that the operator always takes exactly one argument, so it "transforms" any attempt at multiple arguments with a comma operator chain (and spits out an error for zero arguments).