diff --git a/src/plugins/cppeditor/cppchecksymbols.cpp b/src/plugins/cppeditor/cppchecksymbols.cpp
index 52deded323ae5fa240f176823b47383cb88e176a..27126be286da0be9ce75d66f5bc1183118435675 100644
--- a/src/plugins/cppeditor/cppchecksymbols.cpp
+++ b/src/plugins/cppeditor/cppchecksymbols.cpp
@@ -425,17 +425,18 @@ void CheckSymbols::checkNamespace(NameAST *name)
     warning(line, column, QCoreApplication::translate("CheckUndefinedSymbols", "Expected a namespace-name"), length);
 }
 
-void CheckSymbols::checkName(NameAST *ast)
+void CheckSymbols::checkName(NameAST *ast, Scope *scope)
 {
     if (ast && ast->name) {
+        if (! scope)
+            scope = findScope(ast);
+
         if (const Identifier *ident = ast->name->identifier()) {
             const QByteArray id = QByteArray::fromRawData(ident->chars(), ident->size());
             if (_potentialTypes.contains(id)) {
-                Scope *scope = findScope(ast);
                 const QList<LookupItem> candidates = _context.lookup(ast->name, scope);
                 addUsage(candidates, ast);
             } else if (_potentialMembers.contains(id)) {
-                Scope *scope = findScope(ast);
                 const QList<LookupItem> candidates = _context.lookup(ast->name, scope);
                 addMemberUsage(candidates, ast);
             }
@@ -545,6 +546,28 @@ void CheckSymbols::endVisit(TemplateDeclarationAST *)
     _templateDeclarationStack.takeFirst();
 }
 
+bool CheckSymbols::visit(MemInitializerAST *ast)
+{
+    if (_functionDefinitionStack.isEmpty())
+        return false;
+
+    if (ast->name) {
+        FunctionDefinitionAST *enclosingFunction = _functionDefinitionStack.back();
+        if (ClassOrNamespace *binding = _context.lookupType(enclosingFunction->symbol)) {
+            foreach (Symbol *s, binding->symbols()) {
+                if (Class *klass = s->asClass()){
+                    checkName(ast->name, klass->members());
+                    break;
+                }
+            }
+        }
+    }
+
+    accept(ast->expression_list);
+
+    return false;
+}
+
 bool CheckSymbols::visit(FunctionDefinitionAST *ast)
 {
     _functionDefinitionStack.append(ast);
diff --git a/src/plugins/cppeditor/cppchecksymbols.h b/src/plugins/cppeditor/cppchecksymbols.h
index d7ebfad155e806ed0cca12dac058bc3003cb286a..8b3418fc4584704324bd94b5f953dd660dad1eff 100644
--- a/src/plugins/cppeditor/cppchecksymbols.h
+++ b/src/plugins/cppeditor/cppchecksymbols.h
@@ -93,7 +93,7 @@ protected:
     bool warning(unsigned line, unsigned column, const QString &text, unsigned length = 0);
     bool warning(AST *ast, const QString &text);
 
-    void checkName(NameAST *ast);
+    void checkName(NameAST *ast, Scope *scope = 0);
     void checkNamespace(NameAST *name);
     void addUsage(ClassOrNamespace *b, NameAST *ast);
     void addUsage(const QList<LookupItem> &candidates, NameAST *ast);
@@ -123,6 +123,8 @@ protected:
     virtual bool visit(FunctionDefinitionAST *ast);
     virtual bool visit(MemberAccessAST *ast);
 
+    virtual bool visit(MemInitializerAST *ast);
+
     unsigned startOfTemplateDeclaration(TemplateDeclarationAST *ast) const;
     Scope *findScope(AST *ast) const;
 
diff --git a/src/plugins/cppeditor/cpplocalsymbols.cpp b/src/plugins/cppeditor/cpplocalsymbols.cpp
index 1f5e9f4300b2f5ce0716df4208bd6ca93b7fc74d..fe233d9e01dc602d1ff8aaf728d7646e14d7d70d 100644
--- a/src/plugins/cppeditor/cpplocalsymbols.cpp
+++ b/src/plugins/cppeditor/cpplocalsymbols.cpp
@@ -155,6 +155,12 @@ protected:
         return false;
     }
 
+    virtual bool visit(MemInitializerAST *ast)
+    {
+        accept(ast->expression_list);
+        return false;
+    }
+
     virtual bool visit(TemplateIdAST *ast)
     {
         for (TemplateArgumentListAST *arg = ast->template_argument_list; arg; arg = arg->next)