diff --git a/cfg/std.cfg b/cfg/std.cfg index 6cd0c371a5e..b441970adaa 100644 --- a/cfg/std.cfg +++ b/cfg/std.cfg @@ -9050,7 +9050,7 @@ initializer list (7) string& replace (const_iterator i1, const_iterator i2, init std::scoped_lock std::unique_lock std::shared_lock - std::pair + std::pair std::complex std::exception std::logic_error diff --git a/lib/checkunusedvar.cpp b/lib/checkunusedvar.cpp index 5819eed715e..24fcf38e384 100644 --- a/lib/checkunusedvar.cpp +++ b/lib/checkunusedvar.cpp @@ -724,10 +724,9 @@ void CheckUnusedVar::checkFunctionVariableUsage_iterateScopes(const Scope* const type = Variables::pointer; else if (mTokenizer->isC() || i->typeEndToken()->isStandardType() || - i->isStlType() || + (i->valueType() && i->valueType()->container) || mTokenizer->getSymbolDatabase()->isRecordTypeWithoutSideEffects(i->type()) || - mSettings->library.detectContainer(i->typeStartToken()) || - mSettings->library.getTypeCheck("unusedvar", i->typeStartToken()->str()) == Library::TypeCheck::check) + mSettings->library.getTypeCheck("unusedvar", i->getTypeName()) == Library::TypeCheck::check) type = Variables::standard; if (type == Variables::none || isPartOfClassStructUnion(i->typeStartToken())) diff --git a/test/testunusedvar.cpp b/test/testunusedvar.cpp index 0a676d00218..6fa5d80751d 100644 --- a/test/testunusedvar.cpp +++ b/test/testunusedvar.cpp @@ -6597,6 +6597,11 @@ class TestUnusedVar : public TestFixture { " }\n" "}\n"); ASSERT_EQUALS("[test.cpp:2:23]: (style) Variable 's' is assigned a value that is never used. [unreadVariable]\n", errout_str()); + + functionVariableUsage("void f() {\n" // #14201 + " std::pair p;\n" + "}\n"); + ASSERT_EQUALS("", errout_str()); } void localVarClass() {