# 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.