diff --git a/lib/tokenlist.cpp b/lib/tokenlist.cpp index 9e66043dcce..f59722f21cc 100644 --- a/lib/tokenlist.cpp +++ b/lib/tokenlist.cpp @@ -646,7 +646,7 @@ static void compileUnaryOp(Token *&tok, AST_state& state, void (*f)(Token *&tok, state.depth--; } - if (!state.op.empty() && !(unaryop->str() == "&" && precedes(state.op.top(), unaryop))) { + if (!state.op.empty() && (!precedes(state.op.top(), unaryop) || unaryop->isIncDecOp() || Token::Match(unaryop, "[({[]"))) { // nullary functions, empty lists/arrays unaryop->astOperand1(state.op.top()); state.op.pop(); } diff --git a/test/teststl.cpp b/test/teststl.cpp index 252239307a0..c5861b8ecac 100644 --- a/test/teststl.cpp +++ b/test/teststl.cpp @@ -3946,17 +3946,17 @@ class TestStl : public TestFixture { void size4() { // #2652 - don't warn about vector/deque check("void f(std::vector &v) {\n" " if (v.size() > 0U) {}\n" - "}"); + "}", false, Standards::CPP03); ASSERT_EQUALS("", errout.str()); check("void f(std::deque &v) {\n" " if (v.size() > 0U) {}\n" - "}"); + "}", false, Standards::CPP03); ASSERT_EQUALS("", errout.str()); check("void f(std::array &a) {\n" " if (a.size() > 0U) {}\n" - "}"); + "}", false, Standards::CPP03); ASSERT_EQUALS("", errout.str()); }