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

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy] Check request: readability-use-std-mem-fn
        </td>
    </tr>

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

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

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

<pre>
    
Needs a check that will find redundant usages of `std::bind` and suggest to change them to `std::mem_fn`.

Assume the stuct for two examples below:
```
struct Foo
{
    void display_greeting() {}
    void display_number(int i) {}
    int add_xy(int x, int y) {}
 template<typename... Args> int add_many(Args... args) {}
    auto add_them(auto... args) {} // C++20 required

    int data = 7;
};
```

BEFORE:
```
std::bind(&Foo::display_greeting, _1);
std::bind(&Foo::display_number, _1, _2);
std::bind(&Foo::data, _1);
std::bind(&Foo::add_xy, _1, _2, _3);
std::bind(&Foo::add_many<short, int, long>, _1, _2, _3, _4);
std::bind(&Foo::add_them<short, int, float, double>, _1, _2, _3, _4, _5);
```

AFTER:
```
std::mem_fn(&Foo::display_greeting);
std::mem_fn(&Foo::display_number);
std::mem_fn(&Foo::data);
std::mem_fn(&Foo::add_xy);
std::mem_fn(&Foo::add_many<short, int, long>);
std::mem_fn(&Foo::add_them<short, int, float, double>);
```

</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJyUVV2P6jYQ_TWTlxHIsfMBD3kIAR5b6arvyIkniVsnprGzu_TXV87CLd1Fe1kJyfb4nBn7HOKRzuluJCog3UG6j-TsezsVisZ_7MQZi2qrLgWw8jci5VBi01PzF_peenzVxmCrR4UTqXlUcvQ4O9mRQ9siZMx5BaIEUdZ6VJAxlKNCN3cdOY_eYtPLsSP0PQ1hec8YaDi1I2RsDawEVpbOzcMCRefnxmNrJ_SvFulNDmdDDmsy9jWQWQkZu_5Y6fwU4Edrw0a-A1YiIr5YrVBpdzbycuomIq_HDvgG-BYDKt8_Ao7zUNMEfKNHj_oTNkSlUqe3yxXyBrxaopf_Yz0NZyM9gaj85UyjHGi9XmM5dQ7E4WeeQY4hUwiHbRm2P9aUs7cLOKgIfBPWn8EI_Aj8iBXwHfAdZzjR37OeSL3Lezu9kl4iiD3mIHaLYPvr5E5SYOXucPz9x-GR2veOBzmzoPwS-qx2hacY-Pa9wjPUm_7vxApP_Dm69PIb1W4W3lep8CSeJi--icr1dvLXf0AYjB07EIdHiSs8JU-nX5z-nL41Vi4TZefa0JeVKjylP-t98LY8_nH48YW110_zV-Z-vMyXtJuxz5EWO5-C3qx8Gvwr655O9A2THtgQqUKordjKiIo4T_hGxMkmjvpCySbP1ZYaGVMrRE4k2qZuN1xkGatFEumCM54ywZM4TeN4u27SLE7rbZw2bZwkOUHCaJDarI15GdZ26iLt3ExFLHieicjImoxb2gHnjZFjt_JaXYDz0B6mIrBW9dw5SJjRzrv_8njtzdJI7mjpHqulY4T3hpwHUeJEUslaG-0vq9nRynm1GmhYtWM0T6bovT-7IOTyZHXa93O9buwA_BhKXYfVebJ_UuOBH5fzO-DH6xVeCv5vAAAA__9lqv0F">