﻿# 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](https://en.cppreference.com/w/c/language/attributes/nodiscard)/[C\+\+17](https://en.cppreference.com/w/cpp/language/attributes/nodiscard)\) 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:

```cpp
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:

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

The analyzer does not issue warnings for the following cases:

* constructors;
* overloaded operators\.