diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index 8c9478bff..7dfa7e545 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -5705,14 +5705,14 @@ void SymbolDatabase::setValueType(Token *tok, const ValueType &valuetype) } if (ternary || parent->isArithmeticalOp() || parent->tokType() == Token::eIncDecOp) { - // CONTAINER + pointer => CONTAINER - if (parent->str() == "+" && vt1->type == ValueType::Type::CONTAINER && vt2 && vt2->pointer != 0) { + + // CONTAINER + x => CONTAINER + if (parent->str() == "+" && vt1->type == ValueType::Type::CONTAINER && vt2 && vt2->isIntegral()) { setValueType(parent, *vt1); return; } - - // pointer + CONTAINER => CONTAINER - if (parent->str() == "+" && vt1->pointer != 0U && vt2 && vt2->type == ValueType::Type::CONTAINER) { + // x + CONTAINER => CONTAINER + if (parent->str() == "+" && vt1->isIntegral() && vt2 && vt2->type == ValueType::Type::CONTAINER) { setValueType(parent, *vt2); return; } diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 1d2bc8d54..e768f5728 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -7141,6 +7141,9 @@ private: ASSERT_EQUALS("container(test :: string)", typeOf("void foo(Vector v) { for (auto s: v) { x=s+s; } }", "+", "test.cpp", &set)); ASSERT_EQUALS("container(test :: string)", typeOf("Vector v; x = v.front();", "(", "test.cpp", &set)); ASSERT_EQUALS("container(test :: string)", typeOf("void foo(){test::string s; return \"x\"+s;}", "+", "test.cpp", &set)); + ASSERT_EQUALS("container(test :: string)", typeOf("void foo(){test::string s; return s+\"x\";}", "+", "test.cpp", &set)); + ASSERT_EQUALS("container(test :: string)", typeOf("void foo(){test::string s; return 'x'+s;}", "+", "test.cpp", &set)); + ASSERT_EQUALS("container(test :: string)", typeOf("void foo(){test::string s; return s+'x';}", "+", "test.cpp", &set)); } // new