# V607. Ownerless expression 'Foo'.

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

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

    void Run(int &a, int b, int c, bool X)
    {
      if (X)
        a = b + c;
      else
        b - c;
    }

Из-за опечатки текст программы не закончен. Код компилируется, но не имеет практического смысла.

Исправленный вариант:

    void Run(int &a, int b, int c, bool X)
    {
      if (X)
        a = b + c;
      else
        a = b - c;
    }

Иногда "потерянные" выражения имеют практический смысл. Например, анализатор не будет выдавать предупреждение на следующий код:

    struct A {};
    struct B : public A {};
    ...
    void Foo(B *p)
    {
      static_cast<A*>(p);
      ...
    }

Здесь выражение "static_cast<A*>(p);" проверяет, что класс 'B' наследуется от класса 'A'. Если это не так, то произойдет ошибка компиляции.

В качестве другого примера, можно привести подавление предупреждения компилятора о неиспользуемых переменных:

    void Foo(int a, int b)
    {
      a, b;
    }

Здесь анализатор не выдаст предупреждение V607.

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

CWE-482

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