PVS Studio 6.17 (Windows 7, 64Bit, VS2015), похоже, выдает неправильное предупреждение в приведенном ниже коде.
Предупреждение «V808 ‘статусы’ объект типа ‘unordered_map’ создан, но не использовался».
Исходный код с unordered_map, инициализированный несколькими значениями ключа QStringLiteral. Упрощенная версия с использованием только STL выглядит так:
#include <string>
#include <unordered_map>
#include <iostream>
// Simplified analogue of QStringLiteral
#define StringLiteral(str) ([]() { return std::string{str}; }())
int main()
{
const std::unordered_map<std::string, int> statuses{
{ StringLiteral("aaa"), 1 },
{ StringLiteral("bbb"), 2 },
{ StringLiteral("ccc"), 3 }
};
auto iter = statuses.find("aaa");
if (iter != statuses.cend())
std::cout << iter->first << " has status: " << iter->second << std::endl;
return 0;
}
Любопытно, что V808 создается, когда используется универсальная инициализация возвращаемого значения в лямбда-выражении. Если использовать синтаксис функции конструктора, предупреждение не отображается.
Другой ложный случай производства V808 находится здесь:
const std::unordered_map<int, std::function<void(int, int)>> functions{
{ 0, [](int a, int b) {} },
{ 1, [](int a, int b) {} },
};
const auto it = functions.find(0);
if (it != functions.cend() && it->second)
it->second(1, 2);
Здесь, если создать карту с одним аргументом lambdas — без V808, с двумя или более агрументами, которые он представляет
Ссылка:
Эта проблема известна?
Пожалуйста, не создавайте вопросы таких типов. Пользователи Stackoverflow неоднократно комментировали подобные проблемы.
Других решений пока нет …