# V601. Suspicious implicit type casting.

Анализатор обнаружил подозрительное неявное приведение типа. Такое приведение типа может говорить о наличии ошибки или о неаккуратности в коде.

Рассмотрим первый пример.

    std::string str;
    bool bstr;
    ...
    str = true;

Любой программист удивится, увидев как переменной типа 'std::string' присваивают значение 'true'. Однако это вполне допустимая и работающая конструкция. Здесь программист просто ошибся и написал в коде не ту переменную.

Корректный вариант кода:

    std::string str;
    bool bstr;
    ...
    bstr = true;

Рассмотрим второй пример:

    bool Ret(int *p)
    {
      if (!p)
        return "p1";
      ...
    }

Строковый литерал "p1" превращается в значение 'true' и возвращается из функции. Это очень странный код.

Общие рекомендации по правке подобного кода дать сложно и каждый случай надо рассматривать отдельно.

Данная диагностика классифицируется как:

CWE-704 CERT-INT36-C

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V601.