> That means, if one omits the for-init statement the semicolon also disappears.
That's not quite right, but Edward can easily see why you'd think that. Like most stuff in the standard, you have to look in several different places to get the whole picture. Specifically, the syntax for a for loop is:
for ( for-init-statement condition(opt) ; expression(opt) ) statement
The first semicolon is missing because it's implied to always exist. You can see that if you follow the production for for-init-statement:
for-init-statement:
expression-statement
simple-declaration In 6.2 on page 93 you find the production for expression-statement and 7 on page 101 is the production for simple-declaration:
expression-statement:
expression(opt) ;
simple-declaration:
decl-specifier-seq(opt) init-declarator-list(opt) ;
The semicolon isn't optional in expression-statement or simple-declaration, and for-init-statement isn't optional either. This means that a semicolon is always required, even if the for-init-statement is otherwise empty.
> Obviously, almost all C++ compilers do not implement the for loop in concordance with the ISO Standard, do they?
It's not obvious to be sure, but almost all compilers seem to get it right.

Keep reading the standard! It's good to challenge assumptions with your own interpretation and we can all learn from this kind of discussion.