# V539. Iterators are passed as arguments to 'Foo' function. Consider inspecting the expression.

Анализатор обнаружил код, выполняющий действия над контейнерами, который с большой вероятностью содержит ошибку. Рекомендуется внимательно проверить данный фрагмент кода.

Рассмотрим несколько примеров, демонстрирующих ситуации, когда будет выдано данное предупреждение:

Пример 1.

    void X(std::vector<int> &X, std::vector<int> &Y)
    {
      std::for_each (X.begin(), X.end(), SetValue);
      std::for_each (Y.begin(), X.end(), SetValue);
    }

В функции происходит заполнение двух массивов некими значениями. Из-за опечатки при втором вызове функции "std::for_each" ей передаются итераторы от различных контейнеров, что приведет к ошибке на этапе исполнения программы. Корректный код:

    std::for_each (X.begin(), X.end(), SetValue);
    std::for_each (Y.begin(), Y.end(), SetValue);

Пример 2.

    std::includes(a.begin(), a.end(), a.begin(), a.end());

Данный код странен, и скорее всего планировалось обрабатывать две различные последовательности, а не одну. Корректный вариант кода:

    std::includes(a.begin(), a.end(), b.begin(), b.end());

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

CWE-688 CERT-CTR53-CPP

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