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.



Do you make errors in the code?

Check your code
with PVS-Studio

Static code analysis
for C, C++ and C#

goto PVS-Studio;