diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 90631494a50b1fedf569ceb0308aa7a0b8bb0fea..9ab40ce6f7502b58bcc034286e736ae27705ed43 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -1603,9 +1603,16 @@ bool Parser::parseClassSpecifier(SpecifierListAST *&node)
             unsigned start_declaration = cursor();
             DeclarationAST *declaration = 0;
             if (parseMemberSpecification(declaration)) {
-                *declaration_ptr = new (_pool) DeclarationListAST;
-                (*declaration_ptr)->value = declaration;
-                declaration_ptr = &(*declaration_ptr)->next;
+                if (declaration) {  // paranoia check
+                    *declaration_ptr = new (_pool) DeclarationListAST;
+                    (*declaration_ptr)->value = declaration;
+                    declaration_ptr = &(*declaration_ptr)->next;
+                }
+
+                if (cursor() == start_declaration) { // more paranoia
+                    rewind(start_declaration + 1);
+                    skipUntilDeclaration();
+                }
             } else {
                 _translationUnit->error(start_declaration, "expected a declaration");
                 rewind(start_declaration + 1);