diff --git a/lib/symboldatabase.cpp b/lib/symboldatabase.cpp index d781ddd92..db77f2c78 100644 --- a/lib/symboldatabase.cpp +++ b/lib/symboldatabase.cpp @@ -5348,6 +5348,11 @@ void SymbolDatabase::setValueType(Token *tok, const ValueType &valuetype) setValueType(parent, *vt1); return; } + + if (parent->str() == "+" && vt1->type == ValueType::Type::CONTAINER && vt2 && vt2->type == ValueType::Type::CONTAINER && vt1->container == vt2->container) { + setValueType(parent, *vt1); + return; + } } if (vt1->isIntegral() && vt1->pointer == 0U && diff --git a/test/testsymboldatabase.cpp b/test/testsymboldatabase.cpp index 4d2db21a8..f49776223 100644 --- a/test/testsymboldatabase.cpp +++ b/test/testsymboldatabase.cpp @@ -6619,6 +6619,7 @@ private: set.library.containers["test::string"] = string; ASSERT_EQUALS("signed int", typeOf("Vector v; v[0]=3;", "[", "test.cpp", &set)); ASSERT_EQUALS("container(test :: string)", typeOf("void foo(Vector v) { for (auto s: v) { x=s+s; } }", "s", "test.cpp", &set)); + ASSERT_EQUALS("container(test :: string)", typeOf("void foo(Vector v) { for (auto s: v) { x=s+s; } }", "+", "test.cpp", &set)); } // new