diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp index b4f46ac552a35e069ac36dbf1310ac8b119478d7..0b7ad74214d09711a93f987a0c20186e6c7d5ea0 100644 --- a/src/shared/cplusplus/Parser.cpp +++ b/src/shared/cplusplus/Parser.cpp @@ -986,7 +986,18 @@ bool Parser::parseTemplateDeclaration(DeclarationAST *&node) match(T_GREATER, &ast->greater_token); } - parseDeclaration(ast->declaration); + do { + unsigned start_declaration = cursor(); + + ast->declaration = 0; + if (parseDeclaration(ast->declaration)) + break; + + _translationUnit->error(start_declaration, "expected a declaration"); + rewind(start_declaration + 1); + skipUntilDeclaration(); + } while (LA()); + node = ast; return true; }