Just a couple of comments from what I found so far while starting to implement this for GCC:
2.5.1(p37, l7-l8) shouldn't it also allow pointer types? In C++, random access iterators are basically generalized version of pointers, so it would be weird if random access iterators are supported, but pointers are not.
In C there are no random access iterators in the base language, but if C++ supports pointers, then so should C
2.5.1(p38, l1) This paragraph doesn't seem to be clear enough for me for the cases where var is random access iterator or for collapse(2) and higher. When var is iterator, then the number of iterations can hardly
be computed in type of var after integral promotions. For iterators I'd say it should be computed in type of (b - var) (or (b - lb) ? ). If there are more associated
loops, then does it want to say that (b1 - lb1 + incr1) * (b2 - lb2 + incr2) ... * (bN - lbN + incrN) and any intermediate result thereof must be computed in type of outer most var (resp. (b1 - lb1))?
3.2.6(p110, l18) "if the any" should read "if any"
3.2.12(p118, l4) for C/C++, this function is declared to return int. What is the return value supposed to mean?
Appendix F there is no mention of the new default(firstprivate) clause in Fortran in the list of changes since 2.5, OpenMP 2.5 supported just default(private), default(shared) and default(none) in Fortran.