diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 0f153b43f54faa4a958a59603ff18f7199de0ec9..8cf27fd644d986f9a05b01d6adee81e71c1d91ea 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -1947,6 +1947,11 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item, QChar t
                     }
 #endif
                 } else if (! function->isAmbiguous()) {
+                    // When the user typed the opening parenthesis, he'll likely also type the closing one,
+                    // in which case it would be annoying if we put the cursor after the already automatically
+                    // inserted closing parenthesis.
+                    const bool skipClosingParenthesis = typedChar != QLatin1Char('(');
+
                     if (completionSettings().m_spaceAfterFunctionName)
                         extraChars += QLatin1Char(' ');
                     extraChars += QLatin1Char('(');
@@ -1966,7 +1971,7 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item, QChar t
                     }
 
                     // If the function takes no arguments, automatically place the closing parenthesis
-                    if (item.duplicateCount == 0 && ! function->hasArguments()) {
+                    if (item.duplicateCount == 0 && ! function->hasArguments() && skipClosingParenthesis) {
                         extraChars += QLatin1Char(')');
                         if (endWithSemicolon) {
                             extraChars += semicolon;