From bbdb7d9742249644a2716c90862ee37324fadb20 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Mon, 29 Mar 2010 14:10:42 +0200
Subject: [PATCH] Fixed parsing ambiguity when parsing dependant template
 types.

---
 src/shared/cplusplus/Parser.cpp | 18 +++++++++++++++++-
 src/shared/cplusplus/Parser.h   |  1 +
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index a125683aff2..f323241a187 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -1568,10 +1568,26 @@ bool Parser::parseTemplateTypeParameter(DeclarationAST *&node)
     return false;
 }
 
+bool Parser::lookAtTypeParameter() const
+{
+    if ((LA() == T_CLASS || LA() == T_TYPENAME) && LA(2) == T_IDENTIFIER) {
+        switch (LA(3)) {
+        case T_EQUAL:
+        case T_COMMA:
+        case T_GREATER:
+            return true;
+        }
+    }
+
+    return false;
+}
+
+
 bool Parser::parseTypeParameter(DeclarationAST *&node)
 {
     DEBUG_THIS_RULE();
-    if (LA() == T_CLASS || LA() == T_TYPENAME)
+
+    if (lookAtTypeParameter())
         return parseTypenameTypeParameter(node);
     else if (LA() == T_TEMPLATE)
         return parseTemplateTypeParameter(node);
diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h
index ff546cada91..4ff708b1cc6 100644
--- a/src/shared/cplusplus/Parser.h
+++ b/src/shared/cplusplus/Parser.h
@@ -280,6 +280,7 @@ public:
     bool skipUntilStatement();
     bool skip(int l, int r);
 
+    bool lookAtTypeParameter() const;
     bool lookAtCVQualifier() const;
     bool lookAtFunctionSpecifier() const;
     bool lookAtStorageClassSpecifier() const;
-- 
GitLab