get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/2226748/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2226748,
    "url": "http://patchwork.ozlabs.org/api/patches/2226748/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/bmm.hhuozlstss.gcc.gcc-TEST.tkaminsk.78.1.5@forge-stage.sourceware.org/",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/projects/17/?format=api",
        "name": "GNU Compiler Collection",
        "link_name": "gcc",
        "list_id": "gcc-patches.gcc.gnu.org",
        "list_email": "gcc-patches@gcc.gnu.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<bmm.hhuozlstss.gcc.gcc-TEST.tkaminsk.78.1.5@forge-stage.sourceware.org>",
    "list_archive_url": null,
    "date": "2026-04-22T18:44:03",
    "name": "[v1,05/12] libstdc++: Eliminate __gnu_cxx::__ops function objects (V)",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "324099842779fdc30361da645a1860988222e5e9",
    "submitter": {
        "id": 93223,
        "url": "http://patchwork.ozlabs.org/api/people/93223/?format=api",
        "name": "tkaminsk via Sourceware Forge",
        "email": "forge-bot+tkaminsk@forge-stage.sourceware.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/bmm.hhuozlstss.gcc.gcc-TEST.tkaminsk.78.1.5@forge-stage.sourceware.org/mbox/",
    "series": [
        {
            "id": 501087,
            "url": "http://patchwork.ozlabs.org/api/series/501087/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=501087",
            "date": "2026-04-22T18:44:01",
            "name": "remove-predefined-ops",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/501087/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2226748/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2226748/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)",
            "sourceware.org; dmarc=none (p=none dis=none)\n header.from=forge-stage.sourceware.org",
            "sourceware.org;\n spf=pass smtp.mailfrom=forge-stage.sourceware.org",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=38.145.34.39"
        ],
        "Received": [
            "from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g18By17yTz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 05:18:18 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 2E96841B29F1\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 19:18:16 +0000 (GMT)",
            "from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id 0873540A0876\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 18:45:35 +0000 (GMT)",
            "from forge-stage.sourceware.org (localhost [IPv6:::1])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256)\n (No client certificate requested)\n by forge-stage.sourceware.org (Postfix) with ESMTPS id 67DB043525\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 18:45:33 +0000 (UTC)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org 2E96841B29F1",
            "OpenDKIM Filter v2.11.0 sourceware.org 0873540A0876"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 0873540A0876",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 0873540A0876",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776883535; cv=none;\n b=bEiN14rPGwIk3Gpa6ZLQQ3Ys5gj0P1X9UEoy/UCLZTKDXCn/ifEtWfcmoNqgvedV2ivKsIQhGjlc8ihlWsHk6m1CVjFMD0zBJTilIyHFOwiPKsoPcUPJu1WRJXNSgACRFP/V9uN2DhgzSWHCdG7jfoKJE8DpbT7ZA49wkGLO8AQ=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776883535; c=relaxed/simple;\n bh=aoQ92ZEWIyESaryiTascu36eHVVnHwoa3GSTsgZSyJ8=;\n h=From:Date:Subject:To:Message-ID;\n b=GM032g7hrwpsslMqLS3rzNZ9VLuuhAGOJbfptpHKeHgRUsAPbMbANOzOLZYTunCVV4gOay0KW5ldde/lFfKCIhC2fgkpyCBWL/HTE/Hhi8cXAYc4JKJzFeXfYgWmit6epGWK+7xuVv/smjWPKb9r3+Vc+xl3cM1phnqP0SKNTGk=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "From": "tkaminsk via Sourceware Forge\n <forge-bot+tkaminsk@forge-stage.sourceware.org>",
        "Date": "Wed, 22 Apr 2026 18:44:03 +0000",
        "Subject": "[PATCH v1 05/12] libstdc++: Eliminate __gnu_cxx::__ops function\n objects (V)",
        "To": "gcc-patches mailing list <gcc-patches@gcc.gnu.org>",
        "Message-ID": "\n <bmm.hhuozlstss.gcc.gcc-TEST.tkaminsk.78.1.5@forge-stage.sourceware.org>",
        "X-Mailer": "batrachomyomachia",
        "X-Requested-Reviewer": "fdumont",
        "X-Pull-Request-Organization": "gcc",
        "X-Pull-Request-Repository": "gcc-TEST",
        "X-Pull-Request": "https://forge.sourceware.org/gcc/gcc-TEST/pulls/78",
        "References": "\n <bmm.hhuozlstss.gcc.gcc-TEST.tkaminsk.78.1.0@forge-stage.sourceware.org>",
        "In-Reply-To": "\n <bmm.hhuozlstss.gcc.gcc-TEST.tkaminsk.78.1.0@forge-stage.sourceware.org>",
        "X-Patch-URL": "\n https://forge.sourceware.org/redi/gcc/commit/1989fef0c91198bf2210aa4275394d444dff91e7",
        "X-BeenThere": "gcc-patches@gcc.gnu.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>",
        "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>",
        "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>",
        "List-Post": "<mailto:gcc-patches@gcc.gnu.org>",
        "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>",
        "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>",
        "Reply-To": "gcc-patches mailing list <gcc-patches@gcc.gnu.org>,\n tkaminsk@gcc.gnu.org",
        "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"
    },
    "content": "From: Jonathan Wakely <jwakely@redhat.com>\n\nfind_if, search, search_n, count, count_if, copy_if, remove_copy_if\n\n\t* include/bits/predefined_ops.h (bind1st, bind2nd, not1)\n\t(__equal_to): New factory functions for predicates.\n\t* include/bits/stl_algo.h (__find_if_not, __search_n_aux)\n\t(__search_n_aux, __remove_copy_if, __replace_copy_if)\n\t(__is_permutation): Dereference iterators when invoking predicate.\n\t(find_end, find_if_not, remove_copy, remove_copy_if, remove)\n\t(remove_if, replace_copy, replace_copy_if, is_permutation, find)\n\t(find_if, count, count_if, search, search_n): Do not use\n\tindirect __ops function objects.\n\t* include/bits/stl_algobase.h (__find_if, __count_if)\n\t(__remove_if, __search, __is_permutation): Dereference iterators\n\twhen invoking predicates.\n\t(is_permutation, search): Do not use indirect __ops function\n\tobjects.\n\t* include/std/deque (erase_if): Remove call to __pred_iter.\n\t(erase): Replace __iter_equals_val with __equal_to.\n\t* include/std/inplace_vector (erase_if, erase): Likewise.\n\t* include/std/string (erase_if, erase): Likewise.\n\t* include/std/vector (erase_if, erase): Likewise.\n---\n libstdc++-v3/include/bits/predefined_ops.h | 171 ++++++++++++++++++++-\n libstdc++-v3/include/bits/stl_algo.h       |  72 ++++-----\n libstdc++-v3/include/bits/stl_algobase.h   |  27 ++--\n libstdc++-v3/include/std/deque             |   4 +-\n libstdc++-v3/include/std/inplace_vector    |   4 +-\n libstdc++-v3/include/std/string            |   4 +-\n libstdc++-v3/include/std/vector            |   4 +-\n 7 files changed, 225 insertions(+), 61 deletions(-)",
    "diff": "diff --git a/libstdc++-v3/include/bits/predefined_ops.h b/libstdc++-v3/include/bits/predefined_ops.h\nindex cb7a70ffe347..c6c3505a520e 100644\n--- a/libstdc++-v3/include/bits/predefined_ops.h\n+++ b/libstdc++-v3/include/bits/predefined_ops.h\n@@ -30,8 +30,12 @@\n #ifndef _GLIBCXX_PREDEFINED_OPS_H\n #define _GLIBCXX_PREDEFINED_OPS_H\t1\n \n-#include <bits/move.h>\n #include <bits/stl_function.h> // less<void>, equal_to<void>\n+#if __cplusplus >= 201103L\n+# include <type_traits>        // is_empty, is_scalar, __conditional_t, __or_\n+#else\n+# include <ext/type_traits.h>  // __conditional_type\n+#endif\n \n namespace __gnu_cxx\n {\n@@ -42,6 +46,171 @@ namespace __ops\n   typedef std::equal_to<void> equal_to;\n   typedef std::less<void> less;\n \n+#if __cplusplus >= 201103L\n+\n+  template<typename _Fn>\n+    using __by_ref_or_value_fn\n+      = std::__conditional_t<std::__or_<std::is_empty<_Fn>,\n+\t\t\t\t\tstd::is_scalar<_Fn>>::value,\n+\t\t\t     _Fn, _Fn&>;\n+\n+  // More generic replacements for the deprecated utilities\n+  // std::bind1st, std::bind2nd, and std::not1.\n+  // These aren't fully \"transparent\" like std::less<void> because they\n+  // do not use perfect forwarding, everything is treated as an lvalue.\n+\n+  template<typename _Func, typename _Value, bool _Val_2nd = false>\n+    struct _Comp_with_val\n+    {\n+      using _Fn = __by_ref_or_value_fn<_Func>;\n+\n+      explicit constexpr\n+      _Comp_with_val(_Fn __f, const _Value& __v)\n+      : _M_f(__f), _M_val(__v) { }\n+\n+      [[__no_unique_address__]] _Fn _M_f;\n+      const _Value& _M_val;\n+\n+      template<typename _Tp>\n+\tconstexpr bool\n+\toperator()(_Tp&& __arg) const\n+\t{\n+#pragma GCC diagnostic push\n+#pragma GCC diagnostic ignored \"-Wc++17-extensions\"\n+\t  if constexpr (_Val_2nd)\n+\t    return _M_f(__arg, _M_val);\n+\t  else\n+\t    return _M_f(_M_val, __arg);\n+#pragma GCC diagnostic pop\n+\t}\n+    };\n+\n+  template<typename _Func, typename _Value>\n+    constexpr _Comp_with_val<_Func, _Value>\n+    bind1st(_Func&& __f, const _Value& __val)\n+    { return _Comp_with_val<_Func, _Value>(__f, __val); }\n+\n+  template<typename _Func, typename _Value>\n+    constexpr _Comp_with_val<_Func, _Value, true>\n+    bind2nd(_Func&& __f, const _Value& __val)\n+    { return _Comp_with_val<_Func, _Value, true>(__f, __val); }\n+\n+  // Equivalent to bind2nd(equal_to{}, val)\n+  template<typename _Value>\n+    constexpr _Comp_with_val<equal_to, _Value, true>\n+    __equal_to(const _Value& __val)\n+    { return _Comp_with_val<equal_to, _Value, true>(equal_to(), __val); }\n+\n+    template<typename _Func>\n+    struct _Unary_negate\n+    {\n+      using _Fn = __by_ref_or_value_fn<_Func>;\n+\n+      explicit constexpr\n+      _Unary_negate(_Fn __f) : _M_f(__f) { }\n+\n+      [[__no_unique_address__]] _Fn _M_f;\n+\n+      template<typename _Tp>\n+\tconstexpr bool\n+\toperator()(_Tp&& __arg) const { return !_M_f(__arg); }\n+    };\n+\n+  template<typename _Func>\n+    constexpr _Unary_negate<_Func>\n+    not1(_Func&& __f)\n+    { return _Unary_negate<_Func>(__f); }\n+\n+#else // <= C++11\n+\n+  template<typename _Fn>\n+    struct __by_ref_or_value_fn\n+    : __conditional_type<__is_empty(_Fn), _Fn, _Fn&>\n+    { };\n+\n+  template<typename _Fn>\n+    struct __by_ref_or_value_fn<_Fn*>\n+    { typedef _Fn* __type; };\n+\n+  // We don't use std::bind1st, std::bind2nd, or std::not1 here because they\n+  // require adaptable function objects, i.e. with nested result_type and\n+  // either argument_type or first_argument_type and second_argument_type.\n+\n+  template<typename _Func, typename _Value>\n+    struct _Comp_with_val_1st\n+    {\n+      typedef typename __by_ref_or_value_fn<_Func>::__type _Fn;\n+\n+      explicit\n+      _Comp_with_val_1st(_Fn __f, const _Value& __v)\n+      : _M_f(__f), _M_val(__v) { }\n+\n+      _Fn _M_f;\n+      const _Value& _M_val;\n+\n+      template<typename _Tp>\n+\tbool operator()(_Tp& __arg) const { return _M_f(_M_val, __arg); }\n+      template<typename _Tp>\n+\tbool operator()(const _Tp& __arg) const { return _M_f(_M_val, __arg); }\n+    };\n+\n+  template<typename _Func, typename _Value>\n+    struct _Comp_with_val_2nd\n+    {\n+      typedef typename __by_ref_or_value_fn<_Func>::__type _Fn;\n+\n+      explicit\n+      _Comp_with_val_2nd(_Fn __f, const _Value& __v)\n+      : _M_f(__f), _M_val(__v) { }\n+\n+      _Fn _M_f;\n+      const _Value& _M_val;\n+\n+      template<typename _Tp>\n+\tbool operator()(_Tp& __arg) const { return _M_f(__arg, _M_val); }\n+      template<typename _Tp>\n+\tbool operator()(const _Tp& __arg) const { return _M_f(__arg, _M_val); }\n+    };\n+\n+  template<typename _Func, typename _Value>\n+    inline _Comp_with_val_1st<_Func, _Value>\n+    bind1st(_Func& __f, const _Value& __val)\n+    { return _Comp_with_val_1st<_Func, _Value>(__f, __val); }\n+\n+  template<typename _Func, typename _Value>\n+    inline _Comp_with_val_2nd<_Func, _Value>\n+    bind2nd(_Func& __f, const _Value& __val)\n+    { return _Comp_with_val_2nd<_Func, _Value>(__f, __val); }\n+\n+  template<typename _Value>\n+    inline _Comp_with_val_2nd<equal_to, _Value>\n+    __equal_to(const _Value& __val)\n+    { return _Comp_with_val_2nd<equal_to, _Value>(equal_to(), __val); }\n+\n+  template<typename _Func>\n+    struct _Unary_negate_1 // N.B. different name for C++98 to satisfy ODR\n+    {\n+      typedef typename __by_ref_or_value_fn<_Func>::__type _Fn;\n+\n+      explicit _Unary_negate_1(_Fn __f) : _M_f(__f) { }\n+\n+      _Fn _M_f;\n+\n+      template<typename _Tp>\n+\tbool\n+\toperator()(_Tp& __arg) const { return !_M_f(__arg); }\n+      template<typename _Tp>\n+\tbool\n+\toperator()(const _Tp& __arg) const { return !_M_f(__arg); }\n+    };\n+\n+  template<typename _Func>\n+    inline _Unary_negate_1<_Func>\n+    not1(_Func& __f)\n+    { return _Unary_negate_1<_Func>(__f); }\n+#endif\n+\n+\n   struct _Iter_less_iter\n   {\n     template<typename _Iterator1, typename _Iterator2>\ndiff --git a/libstdc++-v3/include/bits/stl_algo.h b/libstdc++-v3/include/bits/stl_algo.h\nindex 056488ba6e36..b606e1f0e2a6 100644\n--- a/libstdc++-v3/include/bits/stl_algo.h\n+++ b/libstdc++-v3/include/bits/stl_algo.h\n@@ -113,7 +113,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \t\t  _Predicate __pred)\n     {\n       return std::__find_if(__first, __last,\n-\t\t\t    __gnu_cxx::__ops::__negate(__pred));\n+\t\t\t    __gnu_cxx::__ops::not1(__pred));\n     }\n \n   /// Like find_if_not(), but uses and updates a count of the\n@@ -162,7 +162,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \t    __n = __count;\n \t  _ForwardIterator __i = __first;\n \t  ++__i;\n-\t  while (__i != __last && __n != 1 && __unary_pred(__i))\n+\t  while (__i != __last && __n != 1 && __unary_pred(*__i))\n \t    {\n \t      ++__i;\n \t      --__n;\n@@ -201,7 +201,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \t  // __first here is always pointing to one past the last element of\n \t  // next possible match.\n \t  _RandomAccessIter __backTrack = __first;\n-\t  while (__unary_pred(--__backTrack))\n+\t  while (__unary_pred(*--__backTrack))\n \t    {\n \t      if (--__remainder == 0)\n \t\treturn __first - _DistanceType(__count); // Success\n@@ -339,7 +339,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       return std::__find_end(__first1, __last1, __first2, __last2,\n \t\t\t     std::__iterator_category(__first1),\n \t\t\t     std::__iterator_category(__first2),\n-\t\t\t     __gnu_cxx::__ops::__iter_equal_to_iter());\n+\t\t\t     __gnu_cxx::__ops::equal_to());\n     }\n \n   /**\n@@ -390,7 +390,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       return std::__find_end(__first1, __last1, __first2, __last2,\n \t\t\t     std::__iterator_category(__first1),\n \t\t\t     std::__iterator_category(__first2),\n-\t\t\t     __gnu_cxx::__ops::__iter_comp_iter(__comp));\n+\t\t\t     __comp);\n     }\n \n #if __cplusplus >= 201103L\n@@ -470,8 +470,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       __glibcxx_function_requires(_UnaryPredicateConcept<_Predicate,\n \t      typename iterator_traits<_InputIterator>::value_type>)\n       __glibcxx_requires_valid_range(__first, __last);\n-      return std::__find_if_not(__first, __last,\n-\t\t\t\t__gnu_cxx::__ops::__pred_iter(__pred));\n+      return std::__find_if_not(__first, __last, __pred);\n     }\n \n   /**\n@@ -551,7 +550,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \t\t     _OutputIterator __result, _Predicate __pred)\n     {\n       for (; __first != __last; ++__first)\n-\tif (!__pred(__first))\n+\tif (!__pred(*__first))\n \t  {\n \t    *__result = *__first;\n \t    ++__result;\n@@ -588,7 +587,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       __glibcxx_requires_valid_range(__first, __last);\n \n       return std::__remove_copy_if(__first, __last, __result,\n-\t__gnu_cxx::__ops::__iter_equals_val(__value));\n+\t\t\t\t   __gnu_cxx::__ops::__equal_to(__value));\n     }\n \n   /**\n@@ -621,8 +620,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \t    typename iterator_traits<_InputIterator>::value_type>)\n       __glibcxx_requires_valid_range(__first, __last);\n \n-      return std::__remove_copy_if(__first, __last, __result,\n-\t\t\t\t   __gnu_cxx::__ops::__pred_iter(__pred));\n+      return std::__remove_copy_if(__first, __last, __result, __pred);\n     }\n \n #if __cplusplus >= 201103L\n@@ -780,7 +778,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       __glibcxx_requires_valid_range(__first, __last);\n \n       return std::__remove_if(__first, __last,\n-\t\t__gnu_cxx::__ops::__iter_equals_val(__value));\n+\t\t\t      __gnu_cxx::__ops::__equal_to(__value));\n     }\n \n   /**\n@@ -813,8 +811,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n \t    typename iterator_traits<_ForwardIterator>::value_type>)\n       __glibcxx_requires_valid_range(__first, __last);\n \n-      return std::__remove_if(__first, __last,\n-\t\t\t      __gnu_cxx::__ops::__pred_iter(__pred));\n+      return std::__remove_if(__first, __last, __pred);\n     }\n \n   template<typename _ForwardIterator, typename _BinaryPredicate>\n@@ -3124,7 +3121,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)\n \t\t      _Predicate __pred, const _Tp& __new_value)\n     {\n       for (; __first != __last; ++__first, (void)++__result)\n-\tif (__pred(__first))\n+\tif (__pred(*__first))\n \t  *__result = __new_value;\n \telse\n \t  *__result = *__first;\n@@ -3161,8 +3158,8 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)\n       __glibcxx_requires_valid_range(__first, __last);\n \n       return std::__replace_copy_if(__first, __last, __result,\n-\t\t\t__gnu_cxx::__ops::__iter_equals_val(__old_value),\n-\t\t\t\t\t      __new_value);\n+\t\t\t\t    __gnu_cxx::__ops::__equal_to(__old_value),\n+\t\t\t\t    __new_value);\n     }\n \n   /**\n@@ -3196,9 +3193,8 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)\n \t    typename iterator_traits<_InputIterator>::value_type>)\n       __glibcxx_requires_valid_range(__first, __last);\n \n-      return std::__replace_copy_if(__first, __last, __result,\n-\t\t\t\t__gnu_cxx::__ops::__pred_iter(__pred),\n-\t\t\t\t\t      __new_value);\n+      return std::__replace_copy_if(__first, __last, __result, __pred,\n+\t\t\t\t    __new_value);\n     }\n \n #if __cplusplus >= 201103L\n@@ -3503,8 +3499,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)\n \t    typename iterator_traits<_ForwardIterator2>::value_type>)\n       __glibcxx_requires_valid_range(__first1, __last1);\n \n-      return std::__is_permutation(__first1, __last1, __first2,\n-\t\t\t\t   __gnu_cxx::__ops::__iter_comp_iter(__pred));\n+      return std::__is_permutation(__first1, __last1, __first2, __pred);\n     }\n \n #if __cplusplus > 201103L\n@@ -3535,7 +3530,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)\n       // have the same elements in the same order.\n       for (; __first1 != __last1 && __first2 != __last2;\n \t  ++__first1, (void)++__first2)\n-\tif (!__pred(__first1, __first2))\n+\tif (!__pred(*__first1, *__first2))\n \t  break;\n \n       if constexpr (__ra_iters)\n@@ -3556,14 +3551,16 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)\n       for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)\n \t{\n \t  if (__scan != std::__find_if(__first1, __scan,\n-\t\t\t__gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)))\n+\t\t\t\t       __gnu_cxx::__ops::bind1st(__pred,\n+\t\t\t\t\t\t\t\t *__scan)))\n \t    continue; // We've seen this one before.\n \n \t  auto __matches = std::__count_if(__first2, __last2,\n-\t\t__gnu_cxx::__ops::__iter_comp_iter(__pred, __scan));\n+\t\t\t\t\t   __gnu_cxx::__ops::bind1st(__pred,\n+\t\t\t\t\t\t\t\t     *__scan));\n \t  if (0 == __matches\n \t      || std::__count_if(__scan, __last1,\n-\t\t\t__gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))\n+\t\t\t\t __gnu_cxx::__ops::bind1st(__pred, *__scan))\n \t      != __matches)\n \t    return false;\n \t}\n@@ -3593,9 +3590,8 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)\n       __glibcxx_requires_valid_range(__first1, __last1);\n       __glibcxx_requires_valid_range(__first2, __last2);\n \n-      return\n-\tstd::__is_permutation(__first1, __last1, __first2, __last2,\n-\t\t\t      __gnu_cxx::__ops::__iter_equal_to_iter());\n+      return std::__is_permutation(__first1, __last1, __first2, __last2,\n+\t\t\t\t   __gnu_cxx::__ops::equal_to());\n     }\n \n   /**\n@@ -3624,7 +3620,7 @@ _GLIBCXX_END_INLINE_ABI_NAMESPACE(_V2)\n       __glibcxx_requires_valid_range(__first2, __last2);\n \n       return std::__is_permutation(__first1, __last1, __first2, __last2,\n-\t\t\t\t   __gnu_cxx::__ops::__iter_comp_iter(__pred));\n+\t\t\t\t   __pred);\n     }\n #endif // C++14\n \n@@ -3903,7 +3899,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO\n #endif\n \n       return std::__find_if(__first, __last,\n-\t\t\t    __gnu_cxx::__ops::__iter_equals_val(__val));\n+\t\t\t    __gnu_cxx::__ops::__equal_to(__val));\n     }\n \n   /**\n@@ -3928,8 +3924,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO\n \t      typename iterator_traits<_InputIterator>::value_type>)\n       __glibcxx_requires_valid_range(__first, __last);\n \n-      return std::__find_if(__first, __last,\n-\t\t\t    __gnu_cxx::__ops::__pred_iter(__pred));\n+      return std::__find_if(__first, __last, __pred);\n     }\n \n   /**\n@@ -4085,7 +4080,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO\n       __glibcxx_requires_valid_range(__first, __last);\n \n       return std::__count_if(__first, __last,\n-\t\t\t     __gnu_cxx::__ops::__iter_equals_val(__value));\n+\t\t\t     __gnu_cxx::__ops::__equal_to(__value));\n     }\n \n   /**\n@@ -4108,8 +4103,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO\n \t    typename iterator_traits<_InputIterator>::value_type>)\n       __glibcxx_requires_valid_range(__first, __last);\n \n-      return std::__count_if(__first, __last,\n-\t\t\t     __gnu_cxx::__ops::__pred_iter(__pred));\n+      return std::__count_if(__first, __last, __pred);\n     }\n \n   /**\n@@ -4154,7 +4148,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO\n       __glibcxx_requires_valid_range(__first2, __last2);\n \n       return std::__search(__first1, __last1, __first2, __last2,\n-\t\t\t   __gnu_cxx::__ops::__iter_equal_to_iter());\n+\t\t\t   __gnu_cxx::__ops::equal_to());\n     }\n \n   /**\n@@ -4185,7 +4179,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO\n       __glibcxx_requires_valid_range(__first, __last);\n \n       return std::__search_n(__first, __last, __count,\n-\t\t\t     __gnu_cxx::__ops::__iter_equals_val(__val));\n+\t\t\t     __gnu_cxx::__ops::__equal_to(__val));\n     }\n \n \n@@ -4221,7 +4215,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO\n       __glibcxx_requires_valid_range(__first, __last);\n \n       return std::__search_n(__first, __last, __count,\n-\t\t__gnu_cxx::__ops::__iter_comp_val(__binary_pred, __val));\n+\t\t\t     __gnu_cxx::__ops::bind2nd(__binary_pred, __val));\n     }\n \n #if __cplusplus >= 201703L\ndiff --git a/libstdc++-v3/include/bits/stl_algobase.h b/libstdc++-v3/include/bits/stl_algobase.h\nindex 820091aee2dc..0393d3318ed8 100644\n--- a/libstdc++-v3/include/bits/stl_algobase.h\n+++ b/libstdc++-v3/include/bits/stl_algobase.h\n@@ -2101,7 +2101,7 @@ _GLIBCXX_END_NAMESPACE_ALGO\n     __find_if(_Iterator __first, _Iterator __last, _Predicate __pred)\n     {\n #pragma GCC unroll 4\n-      while (__first != __last && !__pred(__first))\n+      while (__first != __last && !__pred(*__first))\n \t++__first;\n       return __first;\n     }\n@@ -2113,7 +2113,7 @@ _GLIBCXX_END_NAMESPACE_ALGO\n     {\n       typename iterator_traits<_InputIterator>::difference_type __n = 0;\n       for (; __first != __last; ++__first)\n-\tif (__pred(__first))\n+\tif (__pred(*__first))\n \t  ++__n;\n       return __n;\n     }\n@@ -2130,7 +2130,7 @@ _GLIBCXX_END_NAMESPACE_ALGO\n       _ForwardIterator __result = __first;\n       ++__first;\n       for (; __first != __last; ++__first)\n-\tif (!__pred(__first))\n+\tif (!__pred(*__first))\n \t  {\n \t    *__result = _GLIBCXX_MOVE(*__first);\n \t    ++__result;\n@@ -2154,7 +2154,8 @@ _GLIBCXX_END_NAMESPACE_ALGO\n       _ForwardIterator2 __p1(__first2);\n       if (++__p1 == __last2)\n \treturn std::__find_if(__first1, __last1,\n-\t\t__gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));\n+\t\t\t      __gnu_cxx::__ops::bind2nd(__predicate,\n+\t\t\t\t\t\t\t*__first2));\n \n       // General case.\n       _ForwardIterator1 __current = __first1;\n@@ -2163,7 +2164,7 @@ _GLIBCXX_END_NAMESPACE_ALGO\n \t{\n \t  __first1 =\n \t    std::__find_if(__first1, __last1,\n-\t\t__gnu_cxx::__ops::__iter_comp_iter(__predicate, __first2));\n+\t\t\t   __gnu_cxx::__ops::bind2nd(__predicate, *__first2));\n \n \t  if (__first1 == __last1)\n \t    return __last1;\n@@ -2173,7 +2174,7 @@ _GLIBCXX_END_NAMESPACE_ALGO\n \t  if (++__current == __last1)\n \t    return __last1;\n \n-\t  while (__predicate(__current, __p))\n+\t  while (__predicate(*__current, *__p))\n \t    {\n \t      if (++__p == __last2)\n \t\treturn __first1;\n@@ -2196,7 +2197,7 @@ _GLIBCXX_END_NAMESPACE_ALGO\n       // Efficiently compare identical prefixes:  O(N) if sequences\n       // have the same elements in the same order.\n       for (; __first1 != __last1; ++__first1, (void)++__first2)\n-\tif (!__pred(__first1, __first2))\n+\tif (!__pred(*__first1, *__first2))\n \t  break;\n \n       if (__first1 == __last1)\n@@ -2209,15 +2210,16 @@ _GLIBCXX_END_NAMESPACE_ALGO\n       for (_ForwardIterator1 __scan = __first1; __scan != __last1; ++__scan)\n \t{\n \t  if (__scan != std::__find_if(__first1, __scan,\n-\t\t\t  __gnu_cxx::__ops::__iter_comp_iter(__pred, __scan)))\n+\t\t\t\t       __gnu_cxx::__ops::bind1st(__pred,\n+\t\t\t\t\t\t\t\t *__scan)))\n \t    continue; // We've seen this one before.\n \n \t  auto __matches\n \t    = std::__count_if(__first2, __last2,\n-\t\t\t__gnu_cxx::__ops::__iter_comp_iter(__pred, __scan));\n+\t\t\t      __gnu_cxx::__ops::bind1st(__pred, *__scan));\n \t  if (0 == __matches ||\n \t      std::__count_if(__scan, __last1,\n-\t\t\t__gnu_cxx::__ops::__iter_comp_iter(__pred, __scan))\n+\t\t\t      __gnu_cxx::__ops::bind1st(__pred, *__scan))\n \t      != __matches)\n \t    return false;\n \t}\n@@ -2251,7 +2253,7 @@ _GLIBCXX_END_NAMESPACE_ALGO\n       __glibcxx_requires_valid_range(__first1, __last1);\n \n       return std::__is_permutation(__first1, __last1, __first2,\n-\t\t\t\t   __gnu_cxx::__ops::__iter_equal_to_iter());\n+\t\t\t\t   __gnu_cxx::__ops::equal_to());\n     }\n #endif // C++11\n \n@@ -2295,8 +2297,7 @@ _GLIBCXX_BEGIN_NAMESPACE_ALGO\n       __glibcxx_requires_valid_range(__first1, __last1);\n       __glibcxx_requires_valid_range(__first2, __last2);\n \n-      return std::__search(__first1, __last1, __first2, __last2,\n-\t\t\t   __gnu_cxx::__ops::__iter_comp_iter(__predicate));\n+      return std::__search(__first1, __last1, __first2, __last2, __predicate);\n     }\n \n _GLIBCXX_END_NAMESPACE_ALGO\ndiff --git a/libstdc++-v3/include/std/deque b/libstdc++-v3/include/std/deque\nindex 2badab80a6dc..3b1a7dea2b10 100644\n--- a/libstdc++-v3/include/std/deque\n+++ b/libstdc++-v3/include/std/deque\n@@ -109,7 +109,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       const auto __osz = __cont.size();\n       const auto __end = __ucont.end();\n       auto __removed = std::__remove_if(__ucont.begin(), __end,\n-\t\t\t\t\t__ops::__pred_iter(std::ref(__pred)));\n+\t\t\t\t\tstd::ref(__pred));\n       if (__removed != __end)\n \t{\n \t  __cont.erase(__niter_wrap(__cont.begin(), __removed),\n@@ -130,7 +130,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       const auto __osz = __cont.size();\n       const auto __end = __ucont.end();\n       auto __removed = std::__remove_if(__ucont.begin(), __end,\n-\t\t\t\t\t__ops::__iter_equals_val(__value));\n+\t\t\t\t\t__ops::__equal_to(__value));\n       if (__removed != __end)\n \t{\n \t  __cont.erase(__niter_wrap(__cont.begin(), __removed),\ndiff --git a/libstdc++-v3/include/std/inplace_vector b/libstdc++-v3/include/std/inplace_vector\nindex b5a81bed3c98..b32aa4f3708c 100644\n--- a/libstdc++-v3/include/std/inplace_vector\n+++ b/libstdc++-v3/include/std/inplace_vector\n@@ -1343,7 +1343,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       const auto __osz = __cont.size();\n       const auto __end = __cont.end();\n       auto __removed = std::__remove_if(__cont.begin(), __end,\n-\t\t\t\t\t__ops::__pred_iter(std::ref(__pred)));\n+\t\t\t\t\tstd::ref(__pred));\n       if (__removed != __end)\n \t{\n \t  __cont.erase(__niter_wrap(__cont.begin(), __removed),\n@@ -1362,7 +1362,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       const auto __osz = __cont.size();\n       const auto __end = __cont.end();\n       auto __removed = std::__remove_if(__cont.begin(), __end,\n-\t\t\t\t\t__ops::__iter_equals_val(__value));\n+\t\t\t\t\t__ops::__equal_to(__value));\n       if (__removed != __end)\n \t{\n \t  __cont.erase(__niter_wrap(__cont.begin(), __removed),\ndiff --git a/libstdc++-v3/include/std/string b/libstdc++-v3/include/std/string\nindex 71864715ff75..74e0c7f2be58 100644\n--- a/libstdc++-v3/include/std/string\n+++ b/libstdc++-v3/include/std/string\n@@ -104,7 +104,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       const auto __osz = __cont.size();\n       const auto __end = __cont.end();\n       auto __removed = std::__remove_if(__cont.begin(), __end,\n-\t\t\t\t\t__ops::__pred_iter(std::ref(__pred)));\n+\t\t\t\t\tstd::ref(__pred));\n       __cont.erase(__removed, __end);\n       return __osz - __cont.size();\n     }\n@@ -119,7 +119,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       const auto __osz = __cont.size();\n       const auto __end = __cont.end();\n       auto __removed = std::__remove_if(__cont.begin(), __end,\n-\t\t\t\t\t__ops::__iter_equals_val(__value));\n+\t\t\t\t\t__ops::__equal_to(__value));\n       __cont.erase(__removed, __end);\n       return __osz - __cont.size();\n     }\ndiff --git a/libstdc++-v3/include/std/vector b/libstdc++-v3/include/std/vector\nindex a98ffb179ec0..47105210bc0c 100644\n--- a/libstdc++-v3/include/std/vector\n+++ b/libstdc++-v3/include/std/vector\n@@ -122,7 +122,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       const auto __osz = __cont.size();\n       const auto __end = __ucont.end();\n       auto __removed = std::__remove_if(__ucont.begin(), __end,\n-\t\t\t\t\t__ops::__pred_iter(std::ref(__pred)));\n+\t\t\t\t\tstd::ref(__pred));\n       if (__removed != __end)\n \t{\n \t  __cont.erase(__niter_wrap(__cont.begin(), __removed),\n@@ -144,7 +144,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       const auto __osz = __cont.size();\n       const auto __end = __ucont.end();\n       auto __removed = std::__remove_if(__ucont.begin(), __end,\n-\t\t\t\t\t__ops::__iter_equals_val(__value));\n+\t\t\t\t\t__ops::__equal_to(__value));\n       if (__removed != __end)\n \t{\n \t  __cont.erase(__niter_wrap(__cont.begin(), __removed),\n",
    "prefixes": [
        "v1",
        "05/12"
    ]
}