diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index e6297755b..c3c06e75e 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -2329,7 +2329,7 @@ bool CheckClass::checkConstFunc(const std::string &classname, const Var *varlist } // function call.. - else if ((tok1->str() != "return" && Token::Match(tok1, "%var% (") && tok1->str() != "c_str") || + else if ((Token::Match(tok1, "%var% (") && !Token::Match(tok1, "return|c_str|if")) || Token::Match(tok1, "%var% < %any% > (")) { isconst = false; diff --git a/test/testclass.cpp b/test/testclass.cpp index 7be54272f..5fc91fb93 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -129,6 +129,7 @@ private: TEST_CASE(const24); // ticket #1708 TEST_CASE(const25); // ticket #1724 TEST_CASE(const26); // ticket #1847 + TEST_CASE(const27); // ticket #1882 TEST_CASE(constoperator1); // operator< can often be const TEST_CASE(constoperator2); // operator<< TEST_CASE(constincdec); // increment/decrement => non-const @@ -3611,6 +3612,26 @@ private: ASSERT_EQUALS("", errout.str()); } + void const27() // ticket #1882 + { + checkConst("class A {\n" + "public:\n" + " A(){m_d=1.0; m_iRealVal=2.0;}\n" + " double dGetValue();\n" + "private:\n" + " double m_d;\n" + " double m_iRealVal;\n" + "};\n" + "double A::dGetValue() {\n" + " double dRet = m_iRealVal;\n" + " if( m_d != 0 )\n" + " return dRet / m_d;\n" + " return dRet;\n" + "};\n" + ); + ASSERT_EQUALS("[test.cpp:9] -> [test.cpp:4]: (style) The function 'A::dGetValue' can be const\n", errout.str()); + } + // increment/decrement => not const void constincdec() {