<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/141791>141791</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang] [[nodiscard]] ignored in std::function due to warning suppression in system headers
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
avikivity
</td>
</tr>
</table>
<pre>
Consider:
```c++
#include <functional>
struct [[nodiscard]] A {};
A f();
std::function<void ()> ff(f);
void g() {
ff();
}
```
std::function calls f() (or rather, a function pointer that that returns an A), but returns void. So somewhere, something should complain about the nodiscard A being discarded. But it looks like it's explicitly silenced somewhere, causing hard-to-find bugs.
Investigation by the gcc team [1] revealed it's likely due to -Wunused-result being suppressed in system headers, which it probably should not be.
[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120460
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJx0U0GPszYQ_TXmMgoCA0ty4ECSD6nnHnqsjD2Au46NPHa26a-vDMnutp8-aQSyeTPvzTxGEOnZInasObPmmokYFuc7cdfv-q7DIxudenQXZ0kr9KzqWbHFW7GHZPycougZr7SVJioEVl2maGXQzgrDqh97DgUfZYCN6Gyd0iSFV6y5suYKPbD2zNorq847uoeJ8SPjp88bCirxV_2rNqsud6cVvHA_YEo50_ekDTDviI2i6AFgB37h2uv3nn5BB1IYQy9ZkGidBy_Cgp7xCwj4RK5O24AewiLC_vAYorcEwkKfePkFxvh1nWTm8LsDcjf8WNBjQqRDWLSdgRYXjQLpbqsR2oIYXUyVET4HCT2MmLDPM6oczjGADmCceycw-h1BB8ZbAvx7NVrqYB5A2qCVqP5LLUWkVGwRXh2CO0zaKhjjTPk-nd_sHSnoWWz9jo9NyywlBBS35HGZXPV4R2FQvWiTBPMAFRGCg8Mf0UZCdfBI0YSnfIrr6pEoZVmgBwW8wYJCoaek7GPRckldrd6NYkwd7MOxLpV46nspWEJYKfnIB8aHWcp8tjF3fmZ8GOP8jzZGMD7Q4j7-HOOcy1mzatCKVdeSF_VbkamuUqfqJDLsyrY-1nXbvJXZ0h2PskFeFI1oJ3V6aycpR1R1OaE6lVVzzHTHC94UDT-WTcPrMq9KfjqN2IpGFmNRt6wu8Ca0yY2535KmTBNF7Mq6bE9lZsSIhrbF5FwaYWfGedpR36WEQ3KD1YXRFOirRNDBbNu8ZzTXXyycnq3zzxn_9Kc_DfoQ3n63JH36yZMsetP9b8w6LHHMpbsxPiRlz9dh9e4vlIHxYeuUGB-ezd47_m8AAAD__3t9cN0">