diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp
index 985b347bbc75c4dcf507d0860fd7e645f9e29c2f..6e432a9ad79d6f583854a2ed2414bf5e32fd6471 100644
--- a/src/widgets/itemviews/qlistview.cpp
+++ b/src/widgets/itemviews/qlistview.cpp
@@ -52,6 +52,8 @@
 #include <qaccessible.h>
 #endif
 
+#include <algorithm>
+
 QT_BEGIN_NAMESPACE
 
 extern bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event);
@@ -1844,6 +1846,16 @@ bool QListViewPrivate::dropOn(QDropEvent *event, int *dropRow, int *dropCol, QMo
 }
 #endif
 
+void QListViewPrivate::removeCurrentAndDisabled(QVector<QModelIndex> *indexes, const QModelIndex &current) const
+{
+    auto isCurrentOrDisabled = [=](const QModelIndex &index) {
+        return !isIndexEnabled(index) || index == current;
+    };
+    indexes->erase(std::remove_if(indexes->begin(), indexes->end(),
+                                  isCurrentOrDisabled),
+                   indexes->end());
+}
+
 /*
  * Common ListView Implementation
 */
diff --git a/src/widgets/itemviews/qlistview_p.h b/src/widgets/itemviews/qlistview_p.h
index 506af311c322650145fa401a7dc493c760ad33ff..2aa34256d25787402cd4c452e8f480652ca6460d 100644
--- a/src/widgets/itemviews/qlistview_p.h
+++ b/src/widgets/itemviews/qlistview_p.h
@@ -372,15 +372,7 @@ public:
     }
     inline bool isHiddenOrDisabled(int row) const { return isHidden(row) || !isIndexEnabled(modelIndex(row)); }
 
-    inline void removeCurrentAndDisabled(QVector<QModelIndex> *indexes, const QModelIndex &current) const {
-        QVector<QModelIndex>::iterator it = indexes->begin();
-        while (it != indexes->end()) {
-            if (!isIndexEnabled(*it) || (*it) == current)
-                indexes->erase(it);
-            else
-                ++it;
-        }
-    }
+    void removeCurrentAndDisabled(QVector<QModelIndex> *indexes, const QModelIndex &current) const;
 
     void scrollElasticBandBy(int dx, int dy);