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; }; };