> Ah, yes. So we should share the parsing of the decl-specifier-seq with the > C-style for loop, which allows us to avoid the tentative parsing. That was my original idea, but the C-style loop calls cp_parser_simple_declaration(), that shouts at the ':'. So we should either modify it to accept the ':' or split it in two. Both options are well beyond my intentions. Anyway the C-style for loop does use tentative parsing, so you don't avoid it completely.
>> Admittedly, this is not a "trailing_return_type", but AFAICT it has >> exactly the same restrictions. > > The restrictions are slightly different; in the case of a trailing return > type a class-specifier is not one of the expansions, so we don't treat a { > as beginning a class body. In the case of a type-specifier-seq, we do treat > it as beginning a class body, but we give an error about it. Well, the net effect is the same: the tentative parsing is aborted. Then the C-style loop for parses the code, and it is this that prints the error message if needed. Regards. Rodrigo