diff --git a/src/libs/cplusplus/ExpressionUnderCursor.cpp b/src/libs/cplusplus/ExpressionUnderCursor.cpp
index 3bfec589c8caf0d2624614492d6995fcd2684cfb..41b773234e116a648330f8cf04d8d4a387e02cfb 100644
--- a/src/libs/cplusplus/ExpressionUnderCursor.cpp
+++ b/src/libs/cplusplus/ExpressionUnderCursor.cpp
@@ -46,6 +46,13 @@ ExpressionUnderCursor::~ExpressionUnderCursor()
 
 int ExpressionUnderCursor::startOfExpression(BackwardsScanner &tk, int index)
 {
+    if (tk[index - 1].is(T_GREATER)) {
+        const int matchingBraceIndex = tk.startOfMatchingBrace(index);
+
+        if (tk[matchingBraceIndex - 1].is(T_IDENTIFIER))
+            index = matchingBraceIndex - 1;
+    }
+
     index = startOfExpression_helper(tk, index);
 
     if (_jumpedComma) {
@@ -148,11 +155,11 @@ int ExpressionUnderCursor::startOfExpression_helper(BackwardsScanner &tk, int in
         }
         return index - 1;
     } else if (tk[index - 1].is(T_RPAREN)) {
-        int rparenIndex = tk.startOfMatchingBrace(index);
-        if (rparenIndex != index) {
-            if (tk[rparenIndex - 1].is(T_GREATER)) {
-                int lessIndex = tk.startOfMatchingBrace(rparenIndex);
-                if (lessIndex != rparenIndex - 1) {
+        int matchingBraceIndex = tk.startOfMatchingBrace(index);
+        if (matchingBraceIndex != index) {
+            if (tk[matchingBraceIndex - 1].is(T_GREATER)) {
+                int lessIndex = tk.startOfMatchingBrace(matchingBraceIndex);
+                if (lessIndex != matchingBraceIndex - 1) {
                     if (tk[lessIndex - 1].is(T_DYNAMIC_CAST)     ||
                         tk[lessIndex - 1].is(T_STATIC_CAST)      ||
                         tk[lessIndex - 1].is(T_CONST_CAST)       ||
@@ -166,7 +173,7 @@ int ExpressionUnderCursor::startOfExpression_helper(BackwardsScanner &tk, int in
                         return startOfExpression(tk, lessIndex);
                 }
             }
-            return startOfExpression(tk, rparenIndex);
+            return startOfExpression(tk, matchingBraceIndex);
         }
         return index;
     } else if (tk[index - 1].is(T_RBRACKET)) {