diff --git a/cfg/std.cfg b/cfg/std.cfg
index bcea6e88b28..9a89f910fd0 100644
--- a/cfg/std.cfg
+++ b/cfg/std.cfg
@@ -8201,6 +8201,7 @@ initializer list (7) string& replace (const_iterator i1, const_iterator i2, init
false
+
@@ -8215,6 +8216,7 @@ initializer list (7) string& replace (const_iterator i1, const_iterator i2, init
false
+
diff --git a/lib/checkassert.cpp b/lib/checkassert.cpp
index 3ed3ae12aa7..b6ad58b3510 100644
--- a/lib/checkassert.cpp
+++ b/lib/checkassert.cpp
@@ -70,8 +70,9 @@ void CheckAssert::assertWithSideEffects()
continue;
if (tmp->str() == "get" && Token::simpleMatch(tmp->astParent(), ".") && astIsSmartPointer(tmp->astParent()->astOperand1()))
continue;
- if (f->containerYield == Library::Container::Yield::START_ITERATOR || // bailout for std::begin/end
- f->containerYield == Library::Container::Yield::END_ITERATOR)
+ if (f->containerYield == Library::Container::Yield::START_ITERATOR || // bailout for std::begin/end/prev/next
+ f->containerYield == Library::Container::Yield::END_ITERATOR ||
+ f->containerYield == Library::Container::Yield::ITERATOR)
continue;
sideEffectInAssertError(tmp, mSettings->library.getFunctionName(tmp));
}
diff --git a/test/cfg/std.cpp b/test/cfg/std.cpp
index b949f9db9bc..51cf350bbc8 100644
--- a/test/cfg/std.cpp
+++ b/test/cfg/std.cpp
@@ -5041,3 +5041,9 @@ void assertWithSideEffect_std_begin(const std::vector& v) {
return a.size() < b.size();
})); // cppcheck-suppress checkLibraryNoReturn
}
+
+void assertWithSideEffect_std_prev_next(const std::vector& v, std::vector::const_iterator it) {
+ assert(std::prev(it, 1) == v.begin());
+ // cppcheck-suppress checkLibraryNoReturn
+ assert(std::next(it, 1) == v.end());
+}
diff --git a/test/testautovariables.cpp b/test/testautovariables.cpp
index 4951d8c0878..3527b744727 100644
--- a/test/testautovariables.cpp
+++ b/test/testautovariables.cpp
@@ -2442,7 +2442,7 @@ class TestAutoVariables : public TestFixture {
" return std::next(it);\n"
"}");
ASSERT_EQUALS(
- "[test.cpp:3] -> [test.cpp:4] -> [test.cpp:2] -> [test.cpp:4]: (error) Returning object that points to local variable 'x' that will be invalid when returning.\n",
+ "[test.cpp:3] -> [test.cpp:2] -> [test.cpp:4]: (error) Returning iterator to local container 'x' that will be invalid when returning.\n",
errout_str());
check("auto f() {\n"