diff --git a/src/plugins/cpptools/cppcodecompletion.cpp b/src/plugins/cpptools/cppcodecompletion.cpp
index 8805d4555dca6c56a47753d6558d2767e5683eef..6157204867fb29585d7214ce28d8a9daef33229d 100644
--- a/src/plugins/cpptools/cppcodecompletion.cpp
+++ b/src/plugins/cpptools/cppcodecompletion.cpp
@@ -1128,7 +1128,7 @@ void CppCodeCompletion::complete(const TextEditor::CompletionItem &item)
                     if (function->argumentCount() == 0) {
                         extraChars += QLatin1Char('<');
                     }
-                } else {
+                } else if (! function->isAmbiguous()) {
                     extraChars += QLatin1Char('(');
 
                     // If the function takes no arguments, automatically place the closing parenthesis
diff --git a/src/shared/cplusplus/CheckDeclarator.cpp b/src/shared/cplusplus/CheckDeclarator.cpp
index f1cc0a3f981d754515ea54c6db505f7cd491bca3..ceef0d1d0559e7cce77719b7a1c87cd4f546220f 100644
--- a/src/shared/cplusplus/CheckDeclarator.cpp
+++ b/src/shared/cplusplus/CheckDeclarator.cpp
@@ -157,6 +157,7 @@ bool CheckDeclarator::visit(NestedDeclaratorAST *ast)
 bool CheckDeclarator::visit(FunctionDeclaratorAST *ast)
 {
     Function *fun = control()->newFunction(ast->firstToken());
+    fun->setAmbiguous(ast->as_cpp_initializer != 0);
     ast->symbol = fun;
     fun->setReturnType(_fullySpecifiedType);
 
diff --git a/src/shared/cplusplus/Symbols.cpp b/src/shared/cplusplus/Symbols.cpp
index 35d2d9c6906739322d5986500a44b05d10c75b13..5185aa82659a8fd1f5e6897f21abfeab6cc4a5d0 100644
--- a/src/shared/cplusplus/Symbols.cpp
+++ b/src/shared/cplusplus/Symbols.cpp
@@ -255,6 +255,12 @@ bool Function::isPureVirtual() const
 void Function::setPureVirtual(bool isPureVirtual)
 { _isPureVirtual = isPureVirtual; }
 
+bool Function::isAmbiguous() const
+{ return _isAmbiguous; }
+
+void Function::setAmbiguous(bool isAmbiguous)
+{ _isAmbiguous = isAmbiguous; }
+
 void Function::visitSymbol0(SymbolVisitor *visitor)
 {
     if (visitor->visit(this)) {
diff --git a/src/shared/cplusplus/Symbols.h b/src/shared/cplusplus/Symbols.h
index a9f8cda5479c26f8d26efd5f7951011318517eb4..8efc0fbdbed0c104a843564817f77520b8131223 100644
--- a/src/shared/cplusplus/Symbols.h
+++ b/src/shared/cplusplus/Symbols.h
@@ -322,6 +322,9 @@ public:
     virtual Function *asFunctionType()
     { return this; }
 
+    bool isAmbiguous() const; // internal
+    void setAmbiguous(bool isAmbiguous); // internal
+
 protected:
     virtual void visitSymbol0(SymbolVisitor *visitor);
     virtual void accept0(TypeVisitor *visitor);
@@ -337,6 +340,7 @@ private:
             unsigned _isPureVirtual: 1;
             unsigned _isConst: 1;
             unsigned _isVolatile: 1;
+            unsigned _isAmbiguous: 1;
             unsigned _methodKey: 3;
         };
     };