diff --git a/shared/cplusplus/Parser.cpp b/shared/cplusplus/Parser.cpp
index 46618dd112b8c653b33652ba41100a4109d31538..13fbaa0160b6185e3a9609085d10c13f708fa97c 100644
--- a/shared/cplusplus/Parser.cpp
+++ b/shared/cplusplus/Parser.cpp
@@ -1191,6 +1191,11 @@ bool Parser::parseClassSpecifier(SpecifierAST *&node)
     NameAST *name = 0;
     parseName(name);
 
+    bool parsed = false;
+
+    const bool previousInFunctionBody = _inFunctionBody;
+    _inFunctionBody = false;
+
     if (LA() == T_COLON || LA() == T_LBRACE) {
         BaseSpecifierAST *base_clause = 0;
         if (LA() == T_COLON) {
@@ -1233,9 +1238,12 @@ bool Parser::parseClassSpecifier(SpecifierAST *&node)
             }
         }
         node = ast;
-        return true;
+        parsed = true;
     }
-    return false;
+
+    _inFunctionBody = previousInFunctionBody;
+
+    return parsed;
 }
 
 bool Parser::parseAccessSpecifier(SpecifierAST *&node)