In the docs on the website for foreach, the grammar is specified as follows:
ForeachStatement:
Foreach (ForeachTypeList; Aggregate) ScopeStatement
However, the text refers to NoScopeNonEmptyStatement, for example:
The aggregate must be loop invariant, meaning that elements to the aggregate cannot be added or removed from it in the NoScopeNonEmptyStatement.