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

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy] Regression, false-positive on `std::forward` in capture groups.
        </td>
    </tr>

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

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

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

<pre>
    Hi everyone,

Consider the following snippet of code:
```cpp
#include <ranges>
#include <utility>

template<std::ranges::random_access_range Range, 
         std::ranges::random_access_range Perm>
  requires std::ranges::viewable_range<Range> &&
 std::ranges::viewable_range<Perm>
constexpr auto permuted_view(Range&& range, Perm&& perm) {
  return std::ranges::transform_view{
 std::forward<Perm>(perm),
      [range_view = std::views::all(std::forward<Range>(range))](
          size_t index) -> decltype(auto) { return range_view[index]; }};
}
```

When I ran the latest released `clang-tidy` (19.1.3) over it with a check `cppcoreguidelines-missing-std-forward`, it produces a false-positive warning:
```
$ clang-tidy --version 
Homebrew LLVM version 19.1.3
  Optimized build.
$ clang-tidy b.cpp "--checks=cppcoreguidelines-missing-std-forward" -- -std=c++23 
94 warnings generated.
.../b.cpp:8:38: warning: forwarding reference parameter 'range' is never forwarded inside the function body [cppcoreguidelines-missing-std-forward]
    8 | constexpr auto permuted_view(Range&& range, Perm&& perm) {
      | ^
Suppressed 93 warnings (93 in non-user code).
```

`clang-tidy` (18.1.8) works as expected.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJysVUGv4yYQ_jXkMrLlgO3Yhxxeko221VattlJ7fMIwcehioICTzf76Csd5yXaj6h1qIYIg8818wzcDD0H1BnFNqg2pdgs-xqP165-Po-qP42XRWXlZf1SAJ_QXa5DQLSl2pHi5zltrgpLoIR4RDlZre1amh2CUcxjBHkBYiYTNfyd1cR3CuXmHMmWEHiUCYVvPTY-BsA_PDseotIqX--k0Rxyc5hEJ24Yokyf2coOZ19IOr1wIDOF1OoHPaSZ0CzegFt5t-xv64S0EAI9_j8pjeA5wUnjmncarLWHbq2f2AQit07iivM_2O8_CmhDxq_PAx2jBoR_GiPI1WRHazAyTD_A3thPAdc9NyxbIanNnEkdvnscSPTfhYP1wxX8zevvzwfoz9_IhStrMPt4UA9NHqs2EPCEBYbs7SNqZHXKtCW2ewN8SSGgz82rTqHaENo9u0hfUN3yNoIzEr4lslhIvUeh4cUhokzI3J-HG_h4aqTZXw2pH2AbIapcGm5mn9feKftTkn0c08FMCm-oiyTNE8KiRB5SQ9K-56bOo5IXUBRDaLNt8mbMUjT2hBxXhrOIROIgjii9wLRlhPfajkqiVwZANKgRl-ixEmd0yVBfpplUE560cBQbgcOA6YOZsUFGdEM7cG2X6H4vyVnQl3MODLDuhD8qauVg-2gE7j2f49OmPX-B2Noc_X8CvLqpBfUMJ3ai0zJ8Cd7lwDgilWTZxDITt3seRUsgyyCZ17AShG0I3lM3xteWNYIAeDXoe8RZBnueE7ifHhL00hL2wND1kBGYfqYl5PKBHIxAc93zAiB4IXc2yW4EKYFJbvNmgBDV1w2szHI2IKTWpgybVv49btburuAGy2sL_X-lTGa62QKq5mfw-OucxJG227J4-QpuWgTJgrMnGgP7azGmb_4f2n4q7yZd5k6I4W_8lAA-AXx2KdDMLuWayZS1f4Hq5YktW0rYsFsd1VfFKyhqXbVd3ZV1QzhspuqJrO1lWK7ZQa1rQcpm-mlVlkZeyEqKsxapaNp1gNSkLHLjSudanIbe-X6gQRlwvl9WqLBaad6jD9PBR-hAzpekh9OtklXVjH0hZaBViuONEFfX0ZD6YVTv4jH1Ko7ImXcK_yi5VUF380NLqImVYcBdHj9B7O7qQL0av18cY3dQO6Z7Qfa_icexyYQdC9ymQ-Sdz3v6FIhK6n9gFQvczwdOa_hMAAP__vMVt6A">