Merge "Backport: Replace std::bind2nd usage with a lambda to fix C++17 build"
diff --git a/src/compiler/gap-resolver.cc b/src/compiler/gap-resolver.cc
index 1ba1044..b85f96e 100644
--- a/src/compiler/gap-resolver.cc
+++ b/src/compiler/gap-resolver.cc
@@ -5,7 +5,6 @@
 #include "src/compiler/gap-resolver.h"
 
 #include <algorithm>
-#include <functional>
 #include <set>
 
 namespace v8 {
@@ -19,10 +18,6 @@
 const int kFloat32Bit = REP_BIT(MachineRepresentation::kFloat32);
 const int kFloat64Bit = REP_BIT(MachineRepresentation::kFloat64);
 
-inline bool Blocks(MoveOperands* move, InstructionOperand destination) {
-  return !move->IsEliminated() && move->source().InterferesWith(destination);
-}
-
 // Splits a FP move between two location operands into the equivalent series of
 // moves between smaller sub-operands, e.g. a double move to two single moves.
 // This helps reduce the number of cycles that would normally occur under FP
@@ -196,8 +191,11 @@
   // The move may be blocked on a (at most one) pending move, in which case we
   // have a cycle.  Search for such a blocking move and perform a swap to
   // resolve it.
-  auto blocker = std::find_if(moves->begin(), moves->end(),
-                              std::bind2nd(std::ptr_fun(&Blocks), destination));
+  auto blocker =
+      std::find_if(moves->begin(), moves->end(), [&](MoveOperands* move) {
+        return !move->IsEliminated() &&
+               move->source().InterferesWith(destination);
+      });
   if (blocker == moves->end()) {
     // The easy case: This move is not blocked.
     assembler_->AssembleMove(&source, &destination);