diff --git a/src/shared/cplusplus/CheckName.cpp b/src/shared/cplusplus/CheckName.cpp
index 46afb784569426f341c1973f8a374e5cb93ab444..d98c9b9610dac7f3a767bb2599949acf886ae654 100644
--- a/src/shared/cplusplus/CheckName.cpp
+++ b/src/shared/cplusplus/CheckName.cpp
@@ -367,11 +367,15 @@ bool CheckName::visit(TemplateIdAST *ast)
 bool CheckName::visit(ObjCSelectorAST *ast)
 {
     std::vector<const Name *> names;
+    bool hasArgs = false;
     for (ObjCSelectorArgumentListAST *it = ast->selector_argument_list; it; it = it->next) {
         if (it->value->name_token) {
             const Identifier *id = control()->findOrInsertIdentifier(spell(it->value->name_token));
             const NameId *nameId = control()->nameId(id);
             names.push_back(nameId);
+
+            if (!hasArgs && it->value->colon_token)
+                hasArgs = true;
         } else {
             // we have an incomplete name due, probably due to error recovery. So, back out completely
             return false;
@@ -379,7 +383,7 @@ bool CheckName::visit(ObjCSelectorAST *ast)
     }
 
     if (!names.empty()) {
-        _name = control()->selectorNameId(&names[0], names.size(), true);
+        _name = control()->selectorNameId(&names[0], names.size(), hasArgs);
         ast->name = _name;
     }