<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/142453>142453</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang] [[nodiscard]] on return type of function pointer is ignored sometimes
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          tJener
      </td>
    </tr>
</table>

<pre>
    ```c++
#include <functional>
#include <utility>

struct [[nodiscard]] S {};
S (*get_fp())();

template <typename Func>
void f(Func fn) {
 static_cast<Func>(fn)();    // Ignored
    static_cast<Func&>(fn)();   // Ignored
    static_cast<Func&&>(fn)();  // Ignored
    std::move(fn)(); // Ignored
    fn();
}

void i() {
    f(get_fp());
 f(std::bind(get_fp()));

    get_fp()();  // Ignored
 std::bind(get_fp())();
}
```

https://godbolt.org/z/Mje7nWh1r

---

When a function pointer returning a type marked `[[nodiscard]]` is invoked, it will sometimes not generate a `-Wunused-value` warning. As a comparison, it will generate the warning if wrapped in a `std::bind`.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVE2PozgQ_TXFpZQIivCRAwfSWaRdaU9z6OPIwYZ4xtjINmn1_vqVTdLTM0l2NZIlLKree1TVo5hzctRCNFAcoDgmbPFnYxv_l9DCJifD3xso0_X0QIdw0hYol7pXCxcI-cuw6N5Lo5mC_I-76OKlkv79Gkpb5-3Se4x6B224dD2zHIojFEf8glAdoDpCHmS-IFAN1I7Cfx3meN_HEy8xBdLWi2lWzEcx_z4LzSaB3aL7VfJiJMcBqA6vcNBA-yiStug887L_2jPnIX-5QaiOSR8qiIhAHVCHf47aWMEDFvERnMonDL9B8IzjCQWHvIW8ncxF3IMeYkLOpw5Wx7WPsVFyDd06FLKB6l8HEIEx8qF_kpo_yPw0p0D2c_g_Svtf3rsCbi5dxc7ezy4wRObR8JNRfmvsCNT9A9T9_U1U-vWc2TV9s9msl9ez0MjwZmmcjdReWLTCL1ZLPSLDYDKcmP0uOAbBR06GMkXpUOqL-S440AtKj29SKXRmEl5OwqE2HsfwnwXzskC1eV304gTfXJhaROB4Y1F1i61Dhr2ZZmalM_oz4weHP4sbAOWAb5bNs-Ao9cr-c0_LdJvwJuf7fM8S0WTVrq7rOi_q5Nzk6X7Iei4qxrOy3NdEWZVVbKgEE5TRLpENpVSkZUpZne2zclvVBcuHjOp-YCdODHapmJhUW6UuU-h7Ip1bRJPtaFfkiWInoVxcOkS9YnoEorB_bBMAm9MyOtilSjrvflB46VXcVCuiOD7ZIkZf57WOygz38wyzWd32YyDJYlXzi3GkPy-nbW8moC58x_Wxma35JnoP1MW6HFB3Le3S0L8BAAD__7ZVj4k">