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

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy] `bugprone-forwarding-reference-overload` doesn't know about concepts
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          h-2
      </td>
    </tr>
</table>

<pre>
    ```cpp
struct small_vector
{
    constexpr small_vector() noexcept                                 = default; 
    constexpr small_vector(small_vector const &) noexcept             = default;
    constexpr small_vector(small_vector &&) noexcept                  = default;
    constexpr small_vector & operator=(small_vector const &) noexcept = default;
    constexpr small_vector & operator=(small_vector &&) noexcept      = default;
    ~small_vector() noexcept                                          = default;

    template <meta::different_from<small_vector> other_range_t>
        requires(std::ranges::input_range<other_range_t>)
    explicit constexpr small_vector(other_range_t && range) 
    {}
    
    // ...

};
```

results in 
```
small_vector.hpp:186:24: warning: constructor accepting a forwarding reference can hide the copy and move constructors [bugprone-forwarding-reference-overload]
    explicit constexpr small_vector(other_range_t && range) noexcept(is_noexcept) :
                       ^
/home/hannes/devel/biocpp-core/test/clang_tidy/../../include/bio/ranges/container/small_vector.hpp:73:15: note: copy constructor declared here
    constexpr small_vector(small_vector const &) noexcept             = default; //!< Defaulted.
              ^
/home/hannes/devel/biocpp-core/test/clang_tidy/../../include/bio/ranges/container/small_vector.hpp:74:15: note: move constructor declared here
    constexpr small_vector(small_vector &&) noexcept                  = default; //!< Defaulted.
```

although the constraints prevent the constructor from ever being instantiated with either `small_vector const &` or `small_vector`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzNVW1zmzAM_jXwxRcO7ECSD3xIluZv5AwWwZtjM9uk7b-fDGlD1qZr1-5uHOcXJD-SHkmmMuKxjIp0fOuui9JtlK6dt33tiTtypfYnqL2xoyBabMYFwac22nl46Oy1Il1GdEW0gYcaOk_-9ERsSwQ0vFc-YhvyDvjpdtQiES1uGr028FH8Afk2-F9YCJDEdGB5MMe274voa23ciuqWlWhx95kcv8nUxYqHY6e4B1T7dgTPI7bGV8imAQva7xtrjii68oTdEeNbsHvL9QH2CHt3AQyPhZ-9tOACBV6MkIOuG9dSd70fTyP2Cyy6usAhzUrW0t8unavjZ5bJiI18TfncRIvtZH9Z0R2-JEmSKTtB-Zmvp3adKmCAyKkjUpNXtaZ-Ji32OVtnywJHOseB3HOrpT6E5RBbaH8sE16H9KKAcNIYi1oibCwMCamB1FyTVgogGDee7B4J14IczQmmOI5E-abqD501GmYXoNkz0AxPWGW4iPLt1_H9VJ-oKN3-ssNMsPV1lfxep_m5ijAXrTlCmLjWoYp2Ak6gcK6kwQtzVhsbxB4cIu9qhcb3XopH3GAOz4PUteoFjKdwPBcg6hvtudSAwexeydGChUTlIS_aeBjzgyxPkyQAjVoQBKmAf319nuszohk2C9mO30Ekr7H535A4f0Hi7xX6ORI__o94m8ZXO5wr35r-0J5bLbiOMWPLdxa51H7yfQwp3JYERZZUELpWoohrL_GCFeRe-paADO1D0NCNmihSYl7IcZvEUGZFkWd5sUpZLEomVmzFYy-9ghKbfcjgbMhgvg0A7-x-NCgMOB3RhSc_tLknvDL9cAEEWl3cW1W23nfD5T1weMAg-iqp8ddAd0qdnqYZ2vuODofCca4fCiVfUpbGbQmsKjKaQ0oFZcAz4E0uqnS5WlRptaznseIVKBciQf9jWdKU0ixNF1nO8pQldbHiLGuqpprXTb5YRvMUjlyqJBhOjD3Ethx8wLAdCpV03l2E3Dl50ABP-LzH1NqyndF4cLUc_PwF_a769A">