# V607. Ownerless expression 'Foo'.

The analyzer has detected a potential error: an extra expression in the code. Such "lost" expressions most often occur in the code when the key word return is missing or due to careless code refactoring.

Consider this sample:

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

The program text is incomplete because of the misprint. It compiles well but has no practical sense.

This is the correct code:

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

Sometimes "lost" expressions do have practical sense. For example, the analyzer won't generate the warning for the following code:

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

The "static_cast<A*>(p);" expression here checks that the 'B' class is a inherits of the 'A' class. If it is not so, a compilation error will occur.

As another example, we can cite the following code intended to suppress the compiler-generated warnings about unused variables:

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

The analyzer won't generate the V607 warning in this case.

This diagnostic is classified as:

CWE-482

You can look at examples of errors detected by the V607 diagnostic.