The expression (i++, i)
uses the comma operator → it first evaluates the left side, and then the right side, the result is on the right side. Since this operator also enters a sequence point, the result is correctly defined: this value i
after increasing it.
In this example, it just uselessly confuses the code because it has the same result as the record reverse(++i);
(or even reverse(i + 1);
that better matches the function-recursive approach).