diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 573c9a254666d5b803efb479e4a60eee8b87ab83..824b7b4b1cb1415a350e1475b862e232afa57be2 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -435,15 +435,15 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
     m_startPosition = findStartOfName(editor);
     m_completionOperator = T_EOF_SYMBOL;
 
-    int endOfExpression = m_startPosition;
+    int endOfOperator = m_startPosition;
 
     // Skip whitespace preceding this position
-    while (editor->characterAt(endOfExpression - 1).isSpace())
-        --endOfExpression;
+    while (editor->characterAt(endOfOperator - 1).isSpace())
+        --endOfOperator;
 
-    endOfExpression = startOfOperator(editor, endOfExpression,
-                                      &m_completionOperator,
-                                      /*want function call =*/ editor->position() == endOfExpression);
+    int endOfExpression = startOfOperator(editor, endOfOperator,
+                                          &m_completionOperator,
+                                          /*want function call =*/ true);
 
     Core::IFile *file = editor->file();
     QString fileName = file->fileName();
@@ -464,6 +464,11 @@ int CppCodeCompletion::startCompletion(TextEditor::ITextEditable *editor)
                 m_completionOperator = T_SIGNAL;
             else if (expression.endsWith(QLatin1String("SLOT")))
                 m_completionOperator = T_SLOT;
+            else if (editor->position() != endOfOperator) {
+                // We don't want a function completion when the cursor isn't at the opening brace
+                expression.clear();
+                m_completionOperator = T_EOF_SYMBOL;
+            }
         }
     }