[llvm] [STLExtras] Introduce bind_{first, last}, [not_]equal_to (PR #175056)

Jakub Kuderski via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 8 14:17:47 PST 2026


================
@@ -2157,6 +2157,32 @@ template <typename T> bool all_equal(std::initializer_list<T> Values) {
   return all_equal<std::initializer_list<T>>(std::move(Values));
 }
 
+template <typename RefT, typename PredT>
+auto bind_first(const RefT &Ref, const PredT &Pred) {
+  return [&](auto &&...Val) {
+    return Pred(Ref, std::forward<decltype(Val)>(Val)...);
----------------
kuhar wrote:

Capturing by ref my be a foot gun for temporaries, I think we may want to do something like this:

```suggestion
template <typename PredT, typename RefT>
auto bind_first(PredT Pred, RefT Ref) {
  return [MyPred = std::move(Ref), MyRef = std::move(Ref)](auto &&...Val) {
    return MyPred(MyRef, std::forward<decltype(Val)>(Val)...);
```

I'd also swap the order of arguments

https://github.com/llvm/llvm-project/pull/175056


More information about the llvm-commits mailing list