diff --git a/src/libs/3rdparty/cplusplus/Symbols.cpp b/src/libs/3rdparty/cplusplus/Symbols.cpp
index f7423e77422c77db6bfdd052d7043ac14d450362..9a84ccacd6e1ae58381de362b383e2e4473b3cc7 100644
--- a/src/libs/3rdparty/cplusplus/Symbols.cpp
+++ b/src/libs/3rdparty/cplusplus/Symbols.cpp
@@ -337,8 +337,22 @@ bool Function::isSignatureEqualTo(const Function *other, Matcher *matcher) const
     for (unsigned i = 0; i < argc; ++i) {
         Symbol *l = argumentAt(i);
         Symbol *r = other->argumentAt(i);
-        if (! l->type().match(r->type(), matcher))
+        if (! l->type().match(r->type(), matcher)) {
+            if (!l->type()->isReferenceType() && !l->type()->isPointerType()
+                    && !l->type()->isPointerToMemberType()
+                    && !r->type()->isReferenceType() && !r->type()->isPointerType()
+                    && !r->type()->isPointerToMemberType()) {
+                FullySpecifiedType lType = l->type();
+                FullySpecifiedType rType = r->type();
+                lType.setConst(false);
+                lType.setVolatile(false);
+                rType.setConst(false);
+                rType.setVolatile(false);
+                if (lType.match(rType))
+                    continue;
+            }
             return false;
+        }
     }
     return true;
 }
diff --git a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
index b2e1c982949d8f409ca91392448335b19e2fc77f..4fbd7c554d74707194108e4163eb588e66fb3fac 100644
--- a/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
+++ b/src/plugins/cppeditor/followsymbol_switchmethoddecldef_test.cpp
@@ -941,6 +941,34 @@ void CppEditorPlugin::test_FollowSymbolUnderCursor_data()
         "};\n"
     );
 
+    QTest::newRow("matchFunctionSignature_Follow_6") << _(
+        "class Foo {\n"
+        "    void $foo(int);\n"
+        "};\n"
+        "void Foo::@foo(const volatile int) {}\n"
+    );
+
+    QTest::newRow("matchFunctionSignature_Follow_7") << _(
+        "class Foo {\n"
+        "    void $foo(const volatile int);\n"
+        "};\n"
+        "void Foo::@foo(int) {}\n"
+    );
+
+    QTest::newRow("matchFunctionSignature_Follow_8") << _(
+        "class Foo {\n"
+        "    void @$foo(int *);\n"
+        "};\n"
+        "void Foo::foo(const int *) {}\n"
+    );
+
+    QTest::newRow("matchFunctionSignature_Follow_9") << _(
+        "class Foo {\n"
+        "    void @$foo(int&);\n"
+        "};\n"
+        "void Foo::foo(const int&) {}\n"
+    );
+
     QTest::newRow("infiniteLoopLocalTypedef_QTCREATORBUG-11999") << _(
         "template<class MyTree>\n"
         "class TreeConstIterator\n"