https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89875
Paolo Carlini <paolo.carlini at oracle dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED CC|paolo at gcc dot gnu.org | Assignee|unassigned at gcc dot gnu.org |paolo.carlini at oracle dot com --- Comment #3 from Paolo Carlini <paolo.carlini at oracle dot com> --- I think we want something along the lines (only lightly tested so far, but appears to work as expected): Index: parser.c =================================================================== --- parser.c (revision 271035) +++ parser.c (working copy) @@ -28998,7 +28998,11 @@ cp_parser_sizeof_operand (cp_parser* parser, enum /* If the type-id production did not work out, then we must be looking at the unary-expression production. */ if (!expr) - expr = cp_parser_unary_expression (parser); + { + cp_parser_commit_to_tentative_parse (parser); + + expr = cp_parser_unary_expression (parser); + } /* Go back to evaluating expressions. */ --cp_unevaluated_operand;