<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/110223>110223</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Invalid iterator substitution in `modernize-use-ranges` fix-it
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
srpgilles
</td>
</tr>
</table>
<pre>
If I run clang-tidy v19.1.0 from Homebrew on macOS / XCode 16 over this small snippet:
```c++
#include <algorithm>
#include <iostream>
#include <vector>
int main([[maybe_unused]] int argc, [[maybe_unused]] char** argv)
{
std::vector<int> indexes { 1, 2, 7, 8, 4, 5 };
std::sort(indexes.begin(), indexes.end());
auto logical_end = std::unique(indexes.begin(), indexes.end());
if (logical_end != indexes.end())
std::cout << "There were duplicates\n";
return EXIT_SUCCESS;
}
```
I get the following code:
```c++
#include <algorithm>
#include <iostream>
#include <vector>
int main([[maybe_unused]] int argc, [[maybe_unused]] char** argv)
{
std::vector<int> indexes { 1, 2, 7, 8, 4, 5 };
std::ranges::sort(indexes);
auto logical_end = std::ranges::unique(indexes);
if (logical_end != indexes.end())
std::cout << "There were duplicates\n";
return EXIT_SUCCESS;
}
```
which is incorrect as `std::ranges::unique` returns a `std::ranges::in_out_result` (I got the same mistake with `std::ranges::copy`).
Replacing the generated:
```c++
auto logical_end = std::ranges::unique(indexes);
```
by:
```c++
auto [_, logical_end] = std::ranges::unique(indexes);
```
would fix it.
At any rate, thanks a lot for this extremely useful new diagnostic: I upgraded my whole codebase in less than 30 minutes 🙂
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsVk2PIjcQ_TXmUgJ1u4HuPvSBj0HhFCmzkfaG3HbR7azbJnYZhvz6yAwTmBUTbVZ7ilayCsmuevWq6hUgQtCdRWzYbMlm65GI1DvfBH_otDEYRq1T52a7hy34aEEaYbsxaXWGY15P8kkGe-8G-MUN2Ho8gbMwCPnrMzC-gc8rpxDyObgjeqBeBwiDMAaC1YcDEisWLFuz7M3Os9cjGV-m83rLC22liQqBFSthOuc19QMrnh69axfIo_jo-YiSnL89Xqy2BIPQlvHq0oXlIM4t7qKNARWbrdlsDclH-E4yvoIPnWQvPOMLxhfJ98h4fU1TXmsBAAikUt3F4o3LSltixRNoq_AFA7ByCXnKw5Mpk6mSmSYzA1auWbGEB4DBeWK8uuJMWuxea-J1iny7RqveLmtW3BETkRwY12kpzA6tAlasb-DR6j8jfif8LYneA-PVuyw8T4kexv8T9q5O6SKlYbJiBYzzTz16hFMyKh6MloIwsNnKMs4fMPBI0Vt4-rz9tHv-fbV6en6-eZXrr6R4H72FDgmoR9g7Y9xJ2w6kU_hTxt8t4wd4XtgOwyNF_zfB3uN8Ld7_hzbhPvzUa9mDDqCtdN6jJBAB2Dz7t4bMs2vKAOJDX213LtLOY4iGLml5tYXOva5CEAPCoAOJLwgnTf2HONIdzok4ryf3xH_DgxEy7VKC69CiF4Tqm5bqByng0bK3529nwGbLXVL1HZO0Rz-OzMlFo2CvX0DTu-YtCIQ9Q-pYIkC9sF_SLI0j2Lvrby6-kMcBzRliwH00YPEESovOukBasmIBW4iHzguFCoYznHpn8PLV1oqAoC0YDOGCDkUGg7aR0oZvMlZvWF2zio9UU6i6qMUIm7zk5ZRXZT4d9U2FIs-UrPalUC1ihVM-F2U5n9YSlSzykW54xqdZzcuszqtiOmlVJmVZqno2V5UUNZtmOAhtJsYch4nz3UiHELHJ84zzYmREiyZc_r9wniq7vKb9mq1HvklB4zZ2gU0zowOFGwxpMths7VEYrUBTEp7zEGIbSFMk7Wyqnc2zwSn0Vv-F4xhwfB3lPEsTGWsaRW-anuhwGS_fML7pNPWxnUg3ML5JCa8f44N3f6AkxjcXmoHxzbWOY8P_DgAA___yBsZ_">