diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 4948a773aa5f470af298010cf4c42a74e7cdbd3e..b7507c45cee1a4b19565b20cc209876f49114fff 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -3441,13 +3441,21 @@ bool Parser::parseTypeidExpression(ExpressionAST *&node)
 bool Parser::parseCorePostfixExpression(ExpressionAST *&node)
 {
     DEBUG_THIS_RULE();
-    if (parseCppCastExpression(node))
-        return true;
-    else if (parseTypenameCallExpression(node))
-        return true;
-    else if (parseTypeidExpression(node))
-        return true;
-    else {
+
+    switch (LA()) {
+    case T_DYNAMIC_CAST:
+    case T_STATIC_CAST:
+    case T_REINTERPRET_CAST:
+    case T_CONST_CAST:
+        return parseCppCastExpression(node);
+
+    case T_TYPENAME:
+        return parseTypenameCallExpression(node);
+
+    case T_TYPEID:
+        return parseTypeidExpression(node);
+
+    default: {
         unsigned start = cursor();
         SpecifierAST *type_specifier = 0;
         bool blocked = blockErrors(true);
@@ -3494,7 +3502,8 @@ bool Parser::parseCorePostfixExpression(ExpressionAST *&node)
 
         blockErrors(blocked);
         return parsePrimaryExpression(node);
-    }
+    } // default
+    } // switch
 }
 
 bool Parser::parsePostfixExpression(ExpressionAST *&node)