<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJy9Vctu6zYQ_Rp5M4ggS35ECy2SOPfiAt0UKJBlQFEjmw1NqiTlx9_3kH7BF25RoGgFWtKYw5kzZx5qbXdspMyqF8pmhbSuMkGZrFhlxcvp_uLJsWQT9JE65eXoPXekDH18L6dZufT0y_vH96x8I2-3HDbKrEmrLya8etrbUXfUMhklGV7OlhfFeSWRcO2FMzgagYzmj1Fo1Sv4MWLL8O-t3rGnYCl6DF20VL1s7Y4h34zES4zQOlJWrei0_3zIyjqrXu_Vrlc2f8-Wl3VVMTZwwuJjIEw_IXqAApT4wKL7L9DcXfeOH_F5uv8W-feblADJLghlkEIxDLhHIhdFMrAoSJguir11yEIXzSCb7RhocLYVLfQ_hTmm1H7GzEMjsuAHITnBgY2zI2RaWuNVxw5c9UI5WkM1px897fniPSIDhJvV6BA0m6hjGCexuxE7TjVFXwoAbU98kDwEZQ35ownikNM36_Cv2A6aowmc3gsT4ulOibWx_jFBVwp3LIN1WfWmTMiqd9qlTGXLV1T2W4lflS1X12xl5TcsSsRiCUNCBhQGDRb0tkqrcMSGHwFmSj8C7ZXW1DoWX6R6ujiLjlVgJyAlO-TEHjaAgR2F48D5GSbMomJ2ectrNGX5HEsHYe5yNt1FjMWEujlB48MAJ9w9ndsphoL1jzvq5HEZg8Z6RF0sC9DcWeBZhv-T7mCD0KieXhmOMauQpk_szqwsbyHsxUBhb5_QjQM2TrZGH9m4U7r6SQJoTtT-FaHGPp1jDEo-jPLjxgrvYin_RM3dXItzBRWNw8k7Gqh3dkufexUb4vNRi6WmZCkuI8kH9C36FdO2dcJhOtuY0I0IBJ6SSlDINdplGN0ABPmka6qurmoxwVzaWNf8Oo6HQY_eGp6MTjebEAYfKUrRrwFmbHNptxC03l0eT5gLv4MWiKnaPV7m1XI6n2ya9ln2xayYPkvuuahnVTuruC5lW8zm9azmiRYta99k81ckh81GGMlbfF5iqhAhHlKL9CG48e3j5nw1-fcAVVMWJda0mC6qeVnnbb14brtuPhOzopjPanwFeSuUzqOd3Lr1xDXJZDuuPTa18sHfNoX3ao2JleIBwqCC5mb1KOUSWUkNd61C6kcj4zzzMXIkm6VKJf53s3mSImpSOH8CukBe4g>53715</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            Diagnose unqualified calls to std:: functions, especially `move` and `forward`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            enhancement,
            clang:diagnostics
      </td>
    </tr>

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

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

<pre>
    cc: @cor3ntin

As recently discussed in WG21's LEWG, something like this would be nice:
```
    warning: unqualified name resolves to 'std::move'
        auto y = move(x);
                 ^~~~
    note: use the qualified name 'std::move' instead
        auto y = move(x);
                 ^~~~
                 std::move
```

This should certainly apply to `move` and `forward`, but probably _anything_ in `namespace std` should be considered fair game. If we apply this to _anything_, then we need to have some kind of exception syntax. For example, we want to diagnose
```
std::vector<int> v = {1,2,3};
// This is an actual portability issue! It will break if vector::iterator is a raw pointer type.
sort(v.begin(), v.end());  // expected-warning {{unqualified name resolves to 'std::sort'}}
```
but we don't want to diagnose
```
std::vector<int> v = {1,2,3};
// This is totally fine; it's the "std::swap two-step"
using std::swap;
swap(v, v);  // expected-no-diagnostic
```
We don't even want to diagnose unqualified use of `swap` from _within_ `namespace std`, because the standard library does that all the time on purpose.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy9Vclu4zgQ_Rr5UoggS5aXgw9JnDQamMsAA-QYUGTJ5kQmNSTl5e_nkd7ghnswl26Cll1mserVq0WNVcellFn1TNmkkNZVJmiTFauseD49nz05lmxCdySlvRy8Z0Xa0Me3cpyVM09_vH18y8pX8nbLYaPNmjr9xYSfnvZ26BQ1TEZLhpez5Wlx3kkkrL1wBlcjkMH8M4hOtxp-jNgy_Hvb7dhTsBQ9BhUtVc9bu2PINyNxiQFaR8qqFZ3O54esXGTVy73adWX1Wza77KuKsYETFh8DYfoB0QMUoMQHFupXoLlb944f8Xl6_hX595uUAMkuCG2QQtH3eEYip0UyMC1IGBXF1jpkQUUzyGYzBOqdbUQD_U9hjim1nzHz0Igs-F5ITnBg4-wImZbWeK3YgatWaEdrqOb0vaU9X7xHZIBwsxodgmYTdQzjJk43YseppuhLA6BtiQ-S-6CtIX80QRxyercO_4pt33E0gdt7YUK8rbRYG-sfE3SlcMcyWJdVr9qErHqjXcpUNntBZb-W-FTZbHXNVla-Y1MiFlsYEjKgMKi3oLfRnQ5HHPgBYMb0PdBedx01jsUX6ZYuzqJjHdgJSMkOObGHDWBgR-HYc36GCbOomF3e8BpNWc5j6SDMXc5GXcRYTKibEzQ-9HDC6uncTjEU7P_dUSePsxg09iPqYlmAZmWBZxZ-J93BBtGhelptOMasQ5o-sTuzsryFsBc9hb19Qjf2ODjZGnxk407p6icJoDlR-zNCjX06xxi0fBjlx40V3sVS_oGau7kW5woqGpeTdzRQ6-yWPvc6NsTnoxZLTclSXEaSD-hb9CumbeOEw3S2MaEbEQg8JZWgkWu0Sz-4HgjykVpWalEtxCjo0PFy9QiaxO1UGFe2qB2MjH3nIwaAYqlTKv5rhowG1y03IfQ-GklsrhHc0OTSbiF03e7y9YQ58zdohpi6B27e62o2rkebZTGdLqblXE2mk7Kdy7otuConaq7EtFX1rBl1ouHOL7P6BclmsxFG8havq5h6oMWX7ER6sdzy5-NhvRrpZVmU2ONiPK3qcpE3i-m8UaqeiElR1JMF3om8FbrLI8zcuvXILRPiZlh7HHbaB387FN7rNeZXQgP7mP4b65Z_DsOh7wZvDY9SgMsU3b-7sUlL">