У нас есть следующий код:
class Foo {
std::map<const uint8_t, double> m_throttle;
// ...
void bar(const uint8_t &msg_id)
{
if (m_throttle.find(msg_id) == m_throttle.end())
{
// Whatever
}
}
};
Это приводит к следующей ошибке проверки кода QA-C при применении правил MISRA C ++ 2008, выделяя msg_id
в качестве проблемного токена:
05-00-03
или на английском языке:
Комплексвыражения неявно преобразуются в различные внутренние типы.
Согласно PDF здесь , более полный текст:
Выражение cvalue не должно быть неявнопреобразован в другой базовый тип
Однако реализация std::map::find()
просто:
iterator
find(const key_type& __x)
{ return _M_t.find(__x); }
Где key_type
должно быть uint8_t
.Это ошибка в инструменте, или мне чего-то не хватает?
Обратите внимание, что инструмент использует установленный в настоящее время gcc
, по-видимому, это 5.4.0.