diff --git a/src/shared/cplusplus/CheckSpecifier.cpp b/src/shared/cplusplus/CheckSpecifier.cpp
index 03b2d53d97d483f197b02815f29b63e93852b7b0..5b32762c69dbef66ba753abded75fcdda1c41536 100644
--- a/src/shared/cplusplus/CheckSpecifier.cpp
+++ b/src/shared/cplusplus/CheckSpecifier.cpp
@@ -347,8 +347,17 @@ bool CheckSpecifier::visit(ClassSpecifierAST *ast)
     int previousVisibility = semantic()->switchVisibility(visibility);
     int previousMethodKey = semantic()->switchMethodKey(Function::NormalMethod);
 
-    for (DeclarationListAST *member = ast->member_specifier_list; member; member = member->next) {
-        semantic()->check(member->value, klass->members());
+    DeclarationAST *previousDeclaration = 0;
+    for (DeclarationListAST *it = ast->member_specifier_list; it; it = it->next) {
+        DeclarationAST *declaration = it->value;
+        semantic()->check(declaration, klass->members());
+
+        if (previousDeclaration && declaration &&
+                declaration->asEmptyDeclaration() != 0 &&
+                previousDeclaration->asFunctionDefinition() != 0)
+            translationUnit()->warning(declaration->firstToken(), "unnecessary semicolon after function body");
+
+        previousDeclaration = declaration;
     }
 
     (void) semantic()->switchMethodKey(previousMethodKey);