diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index be64d4654..03f8d1b91 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -662,7 +662,7 @@ void CheckClass::privateFunctions() while (!FuncList.empty()) { // Final check; check if the function pointer is used somewhere.. - const std::string _pattern("return|(|)|,|= " + FuncList.front()->str()); + const std::string _pattern("return|(|)|,|= &|" + FuncList.front()->str()); // or if the function address is used somewhere... // eg. sigc::mem_fun(this, &className::classFunction) diff --git a/test/testunusedprivfunc.cpp b/test/testunusedprivfunc.cpp index ea2e2097d..75c154385 100644 --- a/test/testunusedprivfunc.cpp +++ b/test/testunusedprivfunc.cpp @@ -45,6 +45,7 @@ private: TEST_CASE(func_pointer1); TEST_CASE(func_pointer2); TEST_CASE(func_pointer3); + TEST_CASE(func_pointer4); // ticket #2807 TEST_CASE(ctor); @@ -298,6 +299,21 @@ private: } + void func_pointer4() // ticket #2807 + { + check("class myclass {\n" + "public:\n" + " myclass();\n" + "private:\n" + " static void f();\n" + " void (*fptr)();\n" + "};\n" + "myclass::myclass() { fptr = &f; }\n" + "void myclass::f() {}\n"); + ASSERT_EQUALS("", errout.str()); + } + + void ctor() { check("class PrivateCtor\n"