I think the subscript "opt" should not be there for two reasons:
1) The descriptions of the item seem to assume that "constant-expression" cannot be omitted. If the bracket is empty, the descriptions would make no sense.
2) If "constant-expression" is omitted, the item 1 would be reduced to item 2. There is no need to take out this special case as a separate item.
Is it because the array bound may be omitted when there are initialisers? The compiler counts all the initialisers and that is the array bound.
This is clause 7 from the same section, emphasis mine:
7. In addition to declarations in which an incomplete object type is allowed, an array bound may be omitted in some cases in the declaration of a function parameter ([dcl.fct]). An array bound may also be omitted when an object (but not a non-static data member) of array type is initialized and the declarator is followed by an initializer ([dcl.init], [class.mem], [expr.type.conv], [expr.new]).
In these cases, the array bound is calculated from the number of initial elements (say, N) supplied ([dcl.init.aggr]), and the type of the array is “array of N U”.