diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index 5dd4308da0c..a8e4d41656f 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1120,10 +1120,12 @@ void CPPEditorWidget::switchDeclarationDefinition() foreach (const LookupItem &r, declarations) { if (Symbol *decl = r.declaration()) { if (Function *funTy = decl->type()->asFunctionType()) { - if (funTy->isEqualTo(function) && decl != function && binding == r.binding()) - best.prepend(decl); - else - best.append(decl); + if (funTy->isEqualTo(function)) { + if (decl != function && binding == r.binding()) + best.prepend(decl); + else + best.append(decl); + } } } } @@ -1131,7 +1133,7 @@ void CPPEditorWidget::switchDeclarationDefinition() openCppEditorAt(linkToSymbol(best.first())); } else if (lastVisibleSymbol && lastVisibleSymbol->isDeclaration() && lastVisibleSymbol->type()->isFunctionType()) { - if (Symbol *def = symbolFinder()->findMatchingDefinition(lastVisibleSymbol, snapshot)) + if (Symbol *def = symbolFinder()->findMatchingDefinition(lastVisibleSymbol, snapshot, true)) openCppEditorAt(linkToSymbol(def)); } } diff --git a/src/plugins/cpptools/symbolfinder.cpp b/src/plugins/cpptools/symbolfinder.cpp index bfb803d1c3b..8a3f7bfe56d 100644 --- a/src/plugins/cpptools/symbolfinder.cpp +++ b/src/plugins/cpptools/symbolfinder.cpp @@ -158,6 +158,9 @@ Symbol *SymbolFinder::findMatchingDefinition(Symbol *declaration, continue; // nothing to do foreach (Function *fun, result) { + if (fun->unqualifiedName()->isDestructorNameId() != declaration->unqualifiedName()->isDestructorNameId()) + continue; + const QList declarations = context.lookup(fun->name(), fun->enclosingScope()); if (declarations.isEmpty()) continue;