# V770. Possible use of left shift operator instead of comparison operator.

Анализатор обнаружил потенциально возможную опечатку в коде, связанную с тем, что в условии цикла вместо операторов '<' и '<=' используются '<<' и '<<=', соответственно.

Рассмотрим пример такого кода:

    void Foo(std::vector<int> vec)
    {
      for (size_t i = 0; i << vec.size(); i++) // <=
      {
        // Something
      }
    }

Выражение "i << vec.size()" будет равно нулю. Это явно ошибка, поскольку тело цикла ни разу не выполняется. Корректный вариант кода:

    void Foo(std::vector<int> vec)
    {
      for (size_t i = 0; i < vec.size(); i++)
      {
        // Something
      }
    }

Примечание. Сдвиги вправо (>>, >>=) считаются нормальной ситуацией, так как они используются в различных алгоритмах, например, вычисление количества бит, равных 1. Пример:

    size_t num;
    unsigned short var = N;
    for (num = var & 1 ; var >>= 1; num += var & 1);

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

CWE-480