> Well, yes, this is true but there is still the issue that
> 
> void f() {
> for(class C{};;)
>   ;
> }
> 
> generates the message
> 
> error: types may not be defined in range-based for loops
> 
> when compiled with -std=c++0x and no patches and that is odd since this
> loop isn't range-based.
Oh, I see...
The problem is that regular C for loops allows defining types in the
first statement, whereas range-based for loops do not. That, if I'm
reading the draft correctly.

So the problem is that when setting the
type_definition_forbidden_message to non-NULL, when it sees the type it
calls error() instead of cp_parser_error() so the
cp_parser_parse_tentatively has no effect.

The easy solution would be to remove the assignment to
type_definition_forbidden_message and then check for this case
particulary.
Or we can change the cp_parser_check_type_definition() function to call
cp_parser_error() instead of error().

Or we can just accept the type definition in the range-for and hope that
nobody will notice :P

Regards.
Rodrigo

Reply via email to