From ab088bcec9a64155a5ae547680483520bc49de06 Mon Sep 17 00:00:00 2001 From: Robert Reif Date: Tue, 13 Jul 2010 08:01:57 +0200 Subject: [PATCH] Fixed #1847 (False positive: Method using std::swap<>() can be declared const) --- lib/checkclass.cpp | 3 ++- test/testclass.cpp | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/checkclass.cpp b/lib/checkclass.cpp index 151baa8cd..30f0efe43 100644 --- a/lib/checkclass.cpp +++ b/lib/checkclass.cpp @@ -1996,7 +1996,8 @@ 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 ((tok1->str() != "return" && Token::Match(tok1, "%var% (") && tok1->str() != "c_str") || + Token::Match(tok1, "%var% < %any% > (")) { isconst = false; break; diff --git a/test/testclass.cpp b/test/testclass.cpp index fbfb54db5..bff319f97 100644 --- a/test/testclass.cpp +++ b/test/testclass.cpp @@ -126,6 +126,7 @@ private: TEST_CASE(const23); // ticket #1699 TEST_CASE(const24); // ticket #1708 TEST_CASE(const25); // ticket #1724 + TEST_CASE(const26); // ticket #1847 TEST_CASE(constoperator1); // operator< can often be const TEST_CASE(constoperator2); // operator<< TEST_CASE(constincdec); // increment/decrement => non-const @@ -3569,6 +3570,19 @@ private: TODO_ASSERT_EQUALS("[test.cpp:4]: (style) The function 'A::strGetSize' can be const\n", errout.str()); } + void const26() // ticket #1847 + { + checkConst("class DelayBase {\n" + "public:\n" + "void swapSpecificDelays(int index1, int index2) {\n" + " std::swap(delays_[index1], delays_[index2]);\n" + "}\n" + "float delays_[4];\n" + "};\n" + ); + ASSERT_EQUALS("", errout.str()); + } + // increment/decrement => not const void constincdec() {