On Sat, Jun 20, 2009 at 08:30:30AM -0700, Tim Prince wrote: > Peter Cech wrote: > > > # pragma omp parallel for > > for (int i = 0; i < 10; ++i) { > > # pragma omp critical > > Class instance = create_and_register_new_instance(); > > > > instance.do_something(); > > } > But still, turning on OpenMP here creates a new inner block scope, as you > suggested the first time, so the compiler is right to throw the error. But why? I was trying to find some relevant info, but the only thing I found so far is this paragraph taken from OpenMP specification: An expression statement, iteration statement, selection statement, or try block is considered to be a structured block if the corresponding compound statement obtained by enclosing it in { and } would be a structured block. The wording does not seem to require the expression statement to be actually turned into a block for compilation. Did I miss this requirement somewhere? Or is it one of the things left open? Thanks, Peter