>
>
>
V1071. Return value is not always used.…


V1071. Return value is not always used. Consider inspecting the 'foo' function.

The analyzer found that the return value of a function is ignored. In most cases, the result of the function is used in some way.

The diagnostic is designed to help in cases where a function or its return type is not marked with the standard attribute '[[nodiscard]]' (C23/C++17) or its analogs. If in most cases the result of the function was used in some way, and in certain situations, it is ignored, then this may indicate a possible error.

Consider a synthetic example:

int foo();
....
auto res = foo();
....
if (foo() == 42) { .... }
....
while (foo() != 42) { .... }
....
return foo();
....
foo();
....

Here, the result of the 'foo' function is used in four different ways, and then it is ignored in one. If the result is not used in less than 10% of the total number of calls, the analyzer will issue a warning.

In some situations, this code may have been written intentionally. For example, if the function contains some side effects - operations with a stream, reading/writing 'volatile' variables, etc., and the result can be ignored.

To help a programmer to understand that this behavior was intended, it is recommended to explicitly ignore the return value by casting it to the 'void' type:

....
(void) foo(); // or static_cast<void>(foo());
....

The analyzer does not issue warnings for the following cases:

  • constructors;
  • overloaded operators.