[clang-tools-extra] [llvm] [llvm][ADT] Add wrappers to `std::includes` (PR #143297)
Longsheng Mou via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 9 07:54:33 PDT 2025
================
@@ -1881,6 +1881,19 @@ OutputIt move(R &&Range, OutputIt Out) {
return std::move(adl_begin(Range), adl_end(Range), Out);
}
+/// Provide wrappers to std::includes which take ranges instead of having to
+/// pass begin/end explicitly.
+template <typename R1, typename R2> bool includes(R1 &&Range1, R2 &&Range2) {
+ return std::includes(adl_begin(Range1), adl_end(Range1), adl_begin(Range2),
+ adl_end(Range2));
+}
+
+template <typename R1, typename R2, typename Compare>
+bool includes(R1 &&Range1, R2 &&Range2, Compare C) {
+ return std::includes(adl_begin(Range1), adl_end(Range1), adl_begin(Range2),
+ adl_end(Range2), C);
----------------
CoTinker wrote:
About the forward:
```
template <typename R1, typename R2, typename Compare>
bool includes(R1 &&Range1, R2 &&Range2, Compare C) {
assert(is_sorted(Range1, C) && "Range1 must be sorted with respect to C");
assert(is_sorted(Range2, C) && "Range2 must be sorted with respect to C");
return std::includes(adl_begin(Range1), adl_end(Range1), adl_begin(Range2),
adl_end(Range2), std::forward<Compare>(C));
}
```
I just have a question that why other places no need to forward `C`?
https://github.com/llvm/llvm-project/pull/143297
More information about the cfe-commits
mailing list