[{"id":3680532,"web_url":"http://patchwork.ozlabs.org/comment/3680532/","msgid":"<bmm.haxsfc20cg.gcc.gcc-TEST.redi.30.2096.CMT@forge-stage.sourceware.org>","list_archive_url":null,"date":"2025-09-09T00:37:37","subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","submitter":{"id":93210,"url":"http://patchwork.ozlabs.org/api/people/93210/","name":"Jonathan Wakely via Sourceware Forge","email":"forge-bot+redi@forge-stage.sourceware.org"},"content":"@redi wrote in https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2063:\n\n> @fdumont wrote in #30 (comment):\n> \n> > Additionnally improve __lower_bound/__upper_bound signatures. Those internal\n> > functions have been introduced as implementation details of respectively\n> > std::lower_bound/std::upper_bound. For this reason they are taking\n> > the value argument as a const reference. The problem is that it's now being used\n> > in algos like std::inplace_merge and std::stable_sort and so forces functor used\n> > in those algos to take their arguments as const references. Using a rvalue references\n> > __lower_bound/__upper_bound will automatically adapt to the usage context. The\n> > limitation still exists in C++98.\n> \n> Could you explain this part? Do you mean that the functors used by inplace_merge and stable_sort cannot have signatures like `operator()(T&, T&)` ? I think https://eel.is/c++draft/algorithms.requirements#7.sentence-5 means we don't need to support that.\n> \n> In any case, that seems like a separate change that should be a separate commit?\n\nThat was changed in the standard by https://cplusplus.github.io/LWG/issue3031 which makes things easier for us\n\n--\nhttps://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2096","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 4g0xWB5b50z1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:16:37 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 77052407D894\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:16:35 +0000 (GMT)","from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id BA6D44BB58FD\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:22 +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 CA12F42B8D\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:20 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 77052407D894","OpenDKIM Filter v2.11.0 sourceware.org BA6D44BB58FD"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org BA6D44BB58FD","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org BA6D44BB58FD","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776854602; cv=none;\n b=ZIj50Q1kOVcwbFKwI07zC1T1r1dY0BOTfrLcgYHmxA1KCc2HXe6CJNGPqnjUlP8/jrmG2HKUEeNj5ubDKYuVAx/8XvopB0y8wEYuAsc+ZBMudfWK27vn/B6Bs+REudf4OvY/SOyYYVh3MoUL+4KLYQ0VMCwKd4LqeSDrl+UDMxQ=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776854602; c=relaxed/simple;\n bh=PWxYJVtB71tlG29SpKi9hCIgNArR42NxRQ+jGd5hU8M=;\n h=Subject:From:To:Date:Message-ID:MIME-Version;\n b=KTR/9l6pgxXHW0mTdAQ8uzEbnd2vqVltnl8oyQCR220WPE/h+/ssAPtyrvXWBlENR5oW4hnlcjaxFwSvNlwpUzXwg4gDuzb0iNAdcVzvzk6cVgrT2TFnMJVA9lrmL7GZRcqHTrTd9fCryifUIY00F6f1dRu2nZcELUIsMuXoKfU=","ARC-Authentication-Results":"i=1; server2.sourceware.org","Subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","From":"Jonathan Wakely via Sourceware Forge\n <forge-bot+redi@forge-stage.sourceware.org>","To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>","Date":"Tue, 09 Sep 2025 00:37:37 +0000","Message-ID":"\n <bmm.haxsfc20cg.gcc.gcc-TEST.redi.30.2096.CMT@forge-stage.sourceware.org>","In-Reply-To":"\n <bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org>","X-Mailer":"batrachomyomachia","X-Pull-Request-Organization":"gcc","X-Pull-Request-Repository":"gcc-TEST","X-Pull-Request":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30","X-Comment":"\n https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2096","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","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>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3680533,"web_url":"http://patchwork.ozlabs.org/comment/3680533/","msgid":"<bmm.haxmgjxj0g.gcc.gcc-TEST.redi.30.2069.CMT@forge-stage.sourceware.org>","list_archive_url":null,"date":"2025-09-08T21:01:10","subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","submitter":{"id":93210,"url":"http://patchwork.ozlabs.org/api/people/93210/","name":"Jonathan Wakely via Sourceware Forge","email":"forge-bot+redi@forge-stage.sourceware.org"},"content":"@fdumont wrote in https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issue-45:\n> Also make sure that in algos implementation helpers, functors are passed using\n> perfect forwarding rather than by copy. This way we can remove usage of std::refwrap\n> in std::erase_if implementations and instead use std::move.\n\nThis also seems like it should be a separate change. It's desirable, but it should be separate from removing the indirect ops that wrap iterators.\n\n--\nhttps://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2069","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 4g0xWh2jgZz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:17:04 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id A81EF4209CDA\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:16:52 +0000 (GMT)","from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id 881294BB5912\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:20 +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 651CF42B88\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:20 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org A81EF4209CDA","OpenDKIM Filter v2.11.0 sourceware.org 881294BB5912"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 881294BB5912","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 881294BB5912","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776854600; cv=none;\n b=e6QvpOfK/DSzW7AQA5XjEta+WYgJ3h5FgI9AumVFImdnWWghbZxeO+PY05wj69d2h+JpmPIRk/+PEf+h+BEbIoXa4qOfPP0l/wCO0Tg5r4tamRgE+AWQZjumcmy1iNGAY81m6iQh2QVnm9arftvGnD/KjcNFPMrMiywutZS3A7E=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776854600; c=relaxed/simple;\n bh=HAOawS/+KPa7O7aWrkb8+jlGVRbNW3sg3C8rTasKV2g=;\n h=Subject:From:To:Date:Message-ID:MIME-Version;\n b=uHLdrbnrqFMTt9Z5/hvzcpvSDC/fF2/HBKWYQs/42iK6bIkSEWyU0ftz1PJqZbuV+KqlvFGBrvNYiTbstMbJfcQLpTjk57pIuWgOWl8aUVCa/Yi8fgJPPjNlJb9j5/h14Q94I/E5nvD2YBcattF+h05PJypYxCVOyuSS+Da0M6w=","ARC-Authentication-Results":"i=1; server2.sourceware.org","Subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","From":"Jonathan Wakely via Sourceware Forge\n <forge-bot+redi@forge-stage.sourceware.org>","To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>","Date":"Mon, 08 Sep 2025 21:01:10 +0000","Message-ID":"\n <bmm.haxmgjxj0g.gcc.gcc-TEST.redi.30.2069.CMT@forge-stage.sourceware.org>","In-Reply-To":"\n <bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org>","X-Mailer":"batrachomyomachia","X-Pull-Request-Organization":"gcc","X-Pull-Request-Repository":"gcc-TEST","X-Pull-Request":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30","X-Comment":"\n https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2069","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","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>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3680535,"web_url":"http://patchwork.ozlabs.org/comment/3680535/","msgid":"<bmm.haxlyqpohs.gcc.gcc-TEST.redi.30.2063.CMT@forge-stage.sourceware.org>","list_archive_url":null,"date":"2025-09-08T20:43:13","subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","submitter":{"id":93210,"url":"http://patchwork.ozlabs.org/api/people/93210/","name":"Jonathan Wakely via Sourceware Forge","email":"forge-bot+redi@forge-stage.sourceware.org"},"content":"@fdumont wrote in https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issue-45:\n> Additionnally improve __lower_bound/__upper_bound signatures. Those internal\n> functions have been introduced as implementation details of respectively\n> std::lower_bound/std::upper_bound. For this reason they are taking\n> the value argument as a const reference. The problem is that it's now being used\n> in algos like std::inplace_merge and std::stable_sort and so forces functor used\n> in those algos to take their arguments as const references. Using a rvalue references\n> __lower_bound/__upper_bound will automatically adapt to the usage context. The\n> limitation still exists in C++98.\n\nCould you explain this part? Do you mean that the functors used by inplace_merge and stable_sort cannot have signatures like `operator()(T&, T&)` ?  I think https://eel.is/c++draft/algorithms.requirements#7.sentence-5 means we don't need to support that.\n\nIn any case, that seems like a separate change that should be a separate commit?\n\n--\nhttps://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2063","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 4g0xWz42ldz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:17:19 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 3F4144BCA410\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:17:16 +0000 (GMT)","from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id 623104B920D7\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:20 +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 3F99942B85\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:20 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 3F4144BCA410","OpenDKIM Filter v2.11.0 sourceware.org 623104B920D7"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 623104B920D7","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 623104B920D7","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776854600; cv=none;\n b=eDNa6BHoiSoZpYWIXvO5NY4Z5Quufqi96R1yH75HgUyfr8vgrMJqMLMmxvvAs8z8/vPOeSs7LSJQ0/BEZYLk7PcgaSlkGs+WFDudULmxstSEhGjNtIYiQp0nkawTj9a1i2fW4dhMXYyB5BEek0yRyJTw74pEYBay1/wnITm9V2U=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776854600; c=relaxed/simple;\n bh=H1DScoFd2aQLH28X6sxyeC+yQ507slJ7JZajk2h5O/c=;\n h=Subject:From:To:Date:Message-ID:MIME-Version;\n b=dMwUBBuukxxfYnxn1TmNP+3O27srGGxASQqKpZcXHd50bJqhB+EmhyB1IvPyfjWF1hPdnaJUxlzWZ32RFGO/njskUHLd4d0WxFlIsfb5H/YTsm3ERA7W8w/lUa6B3zOTaevLQFAzwe+GOuLdLf8yW6p8tNBjoEkdA2c+X+lX5f0=","ARC-Authentication-Results":"i=1; server2.sourceware.org","Subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","From":"Jonathan Wakely via Sourceware Forge\n <forge-bot+redi@forge-stage.sourceware.org>","To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>","Date":"Mon, 08 Sep 2025 20:43:13 +0000","Message-ID":"\n <bmm.haxlyqpohs.gcc.gcc-TEST.redi.30.2063.CMT@forge-stage.sourceware.org>","In-Reply-To":"\n <bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org>","X-Mailer":"batrachomyomachia","X-Pull-Request-Organization":"gcc","X-Pull-Request-Repository":"gcc-TEST","X-Pull-Request":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30","X-Comment":"\n https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2063","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","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>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3680536,"web_url":"http://patchwork.ozlabs.org/comment/3680536/","msgid":"<bmm.hhubqf7v0g.gcc.gcc-TEST.forge-bot.30.5568.CMT@forge-stage.sourceware.org>","list_archive_url":null,"date":"2026-04-22T10:43:19","subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","submitter":{"id":93212,"url":"http://patchwork.ozlabs.org/api/people/93212/","name":"Lichenor Forgejo Bot via Sourceware Forge","email":"forge-bot+forge-bot@forge-stage.sourceware.org"},"content":"Sent patch series version 1 containing 1 patches to gcc-patches mailing list <gcc-patches@gcc.gnu.org>.\n[Cover letter](https://inbox.sourceware.org/gcc-patches/bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org)\n\n--\nhttps://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-5568","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 4g0xYC0mGpz1y2d\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:18:23 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 192C74C31888\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:18:21 +0000 (GMT)","from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id BEBFE4B920DE\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:26 +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 8A3F042B83\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:23 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 192C74C31888","OpenDKIM Filter v2.11.0 sourceware.org BEBFE4B920DE"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org BEBFE4B920DE","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org BEBFE4B920DE","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776854606; cv=none;\n b=o8sSChLbZmkc8RfgbMAprf4IVAjdfULM0/6nqp36/eunFN4vwJFDikNe0xJVAD3ihCRaiwEbfv6E6cXBnfVv0ozRG9/RZkOWRk1PYJInU82ClTGDbOiO2NqtYXnuh7kbQLxlH0DmoOyh2LWwZOT3gpsiAtzIeAdr2aqDoLkt0mc=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776854606; c=relaxed/simple;\n bh=kOecaw60512g2V9lOf8/gxaShfZLsRAfFs0k2O3FnIY=;\n h=Subject:From:To:Date:Message-ID:MIME-Version;\n b=qq8hQXBbFsFyo92922+EzgyfwA+QF6ehG1S+gmfUhuUvYglnli0WvVT4FGnkIgYlECh+ItYhsYPWyQ9Uss+UyH4OPOApPCa5ndEH+Us1YwCgNyfMT5OloU6yrOLeUb7F73C1/hYc5biUQ30XKPdqU5jZgU+ryBWHWGLnk2F8zT4=","ARC-Authentication-Results":"i=1; server2.sourceware.org","Subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","From":"Lichenor Forgejo Bot via Sourceware Forge\n <forge-bot+forge-bot@forge-stage.sourceware.org>","To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>","Date":"Wed, 22 Apr 2026 10:43:19 +0000","Message-ID":"\n <bmm.hhubqf7v0g.gcc.gcc-TEST.forge-bot.30.5568.CMT@forge-stage.sourceware.org>","In-Reply-To":"\n <bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org>","X-Mailer":"batrachomyomachia","X-Pull-Request-Organization":"gcc","X-Pull-Request-Repository":"gcc-TEST","X-Pull-Request":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30","X-Comment":"\n https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-5568","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","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>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3680538,"web_url":"http://patchwork.ozlabs.org/comment/3680538/","msgid":"<bmm.haxmfledxc.gcc.gcc-TEST.redi.30.214.REVIEW@forge-stage.sourceware.org>","list_archive_url":null,"date":"2025-09-08T21:00:12","subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","submitter":{"id":93210,"url":"http://patchwork.ozlabs.org/api/people/93210/","name":"Jonathan Wakely via Sourceware Forge","email":"forge-bot+redi@forge-stage.sourceware.org"},"content":"Jonathan Wakely (redi) <redi@gcc.gnu.org>) commented on the code:\n\n\n> +++ libstdc++-v3/include/bits/predefined_ops.h\n> @@ -59,0 +90,4 @@\n> +    struct _LessCRef\n> +    : _LessRefs<typename std::iterator_traits<_Ite>::reference,\n> +\t\tconst typename std::iterator_traits<_Ite>::value_type&>\n> +    { };\nIs `_LessRefs` really necessary? Can't you just have one type that has overloaded `operator()`?\n\nIn my experiments with similar changes I was using the following:\n\n```c++\n#ifdef __glibcxx_transparent_operators // C++ >= 14\n# include <bits/stl_function.h>\n#endif\n\nnamespace __gnu_cxx\n{\nnamespace __ops\n{\n\n#ifdef __glibcxx_transparent_operators // C++ >= 14\n  using equal_to = std::equal_to<void>;\n  using less = std::less<void>;\n#else\n  struct equal_to\n  {\n#ifdef __cpp_rvalue_references\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp&& __t, _Up&& __u) const\n      { return __t == __u; }\n#else // C++98\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp& __t, _Up& __u) const { return __t == __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(const _Tp& __t, _Up& __u) const { return __t == __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp& __t, const _Up& __u) const { return __t == __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(const _Tp& __t, const _Up& __u) const { return __t == __u; }\n#endif\n  };\n\n  struct less\n  {\n#if __cplusplus >= 201103L\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp&& __t, _Up&& __u) const\n      { return __t < __u; }\n#else // C++98\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp& __t, _Up& __u) const { return __t < __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(const _Tp& __t, _Up& __u) const { return __t < __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp& __t, const _Up& __u) const { return __t < __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(const _Tp& __t, const _Up& __u) const { return __t < __u; }\n#endif\n  };\n#endif\n```\n\nThis means we have `__gnu_cxx::__ops::less` and `__gnu_cxx::__ops::equal_to` but they're just reusing the existing `std::less<void>` and `std::equal_to<void>` types when possible, so we don't define new types.\n\nThis way there are no `__less` and `__less_val` functions to create these types, you just construct one as needed:  `__ops::less()`.\n\n\n--\nhttps://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2067","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=38.145.34.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 [38.145.34.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 4g0xYR2lH0z1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:18:35 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 87D6F4901426\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:18:33 +0000 (GMT)","from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id 79B764B920DD\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:20 +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 54C1242B86\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:20 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 87D6F4901426","OpenDKIM Filter v2.11.0 sourceware.org 79B764B920DD"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 79B764B920DD","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 79B764B920DD","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776854600; cv=none;\n b=sgi10P+Dra7p8WirO4coxfa48Ok9Y3gM0wys9MON5MCPceJjCtTlv0GbCgscRdMqXx9DIy1F3u0reyTJn+5rXMUkpHjaR0+sRF43JfXmCI/kms4xV++iit1+n21vw2dBPLaCLi+JECkyrrJlFU25d9BRk0MI5wLPtdGScXDVTHc=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776854600; c=relaxed/simple;\n bh=+1CPZOUXGzZXlwAF9akY2i7ct3qztDxVdqm/4/hGQpI=;\n h=Subject:From:To:Date:Message-ID:MIME-Version;\n b=oyI5YbZ2dTf5XY5Ga37ZiesNxS2fOlWVYK3nxfgx26VcklLqs6aB55BlDeZU6dpFaZ4AapXPMWEevWYb7yypr0nAnG4KS9m9cLDomem/qvayxcdgxlQs4rDIjl+X7xheRSSK0PWyNXhltG5kVQYD55F3AL3hFNhQMHLd6esVIMo=","ARC-Authentication-Results":"i=1; server2.sourceware.org","Subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","From":"Jonathan Wakely via Sourceware Forge\n <forge-bot+redi@forge-stage.sourceware.org>","To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>","Date":"Mon, 08 Sep 2025 21:00:12 +0000","Message-ID":"\n <bmm.haxmfledxc.gcc.gcc-TEST.redi.30.214.REVIEW@forge-stage.sourceware.org>","In-Reply-To":"\n <bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org>","X-Mailer":"batrachomyomachia","X-Pull-Request-Organization":"gcc","X-Pull-Request-Repository":"gcc-TEST","X-Pull-Request":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30","X-Review":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2067","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","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>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3680540,"web_url":"http://patchwork.ozlabs.org/comment/3680540/","msgid":"<bmm.haxmkeniyo.gcc.gcc-TEST.redi.30.216.REVIEW@forge-stage.sourceware.org>","list_archive_url":null,"date":"2025-09-08T21:05:03","subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","submitter":{"id":93210,"url":"http://patchwork.ozlabs.org/api/people/93210/","name":"Jonathan Wakely via Sourceware Forge","email":"forge-bot+redi@forge-stage.sourceware.org"},"content":"Jonathan Wakely (redi) <redi@gcc.gnu.org>) commented on the code:\n\n\n> +++ libstdc++-v3/include/std/vector\n> @@ -123,3 +122,3 @@\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::move(__pred));\nIf somebody calls `erase_if<T, Alloc, Pred&>` to pass the predicate by lvalue reference, this change would cause it to be moved instead of copied. I'm not sure if we need to support that though.\n\n> +++ libstdc++-v3/include/std/vector\n> @@ -123,3 +122,3 @@\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::move(__pred));\nhttps://cplusplus.github.io/LWG/issue3419 means we don't have to support that\n\n\n--\nhttps://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2074","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=38.145.34.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 [38.145.34.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 4g0xcS27bYz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:21:12 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 3B358429ED20\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:21:10 +0000 (GMT)","from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id D79E34B920F8\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:21 +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 8E93742B8A\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:20 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 3B358429ED20","OpenDKIM Filter v2.11.0 sourceware.org D79E34B920F8"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org D79E34B920F8","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org D79E34B920F8","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776854601; cv=none;\n b=mzGZt3FMYNerNesm8BK/5KPyrWIeTpYD80DVcZESV3qaedagFxmNQNvABaAfkT6yVIqJi8Ii5llzqm+ueSGRAJ/J/rCLK16NLnoZSiiVCllZTdnV29JyJJioV/g3//5qQMekF6/gq1eGfE66As3UiZChCIjmVEvhqC2Z7NcJPDY=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776854601; c=relaxed/simple;\n bh=6gkKjrJdhFpMO3Bk4G/tXPILM/lUQYD7yNwQg8VnCC4=;\n h=Subject:From:To:Date:Message-ID:MIME-Version;\n b=vgpZx96YSco0+2kK0tItDgQRt6coKJVU2y/0xSqpRgZE3r0G0xWgILXBhYKNfTbrcDZEXCFkSCdKvzrnAXmauKLj54bf8deUjKhitFnaanV/McY5KJu0sWVvkipiHZxpcoeS2Nph5czY06W/O8lDvSlhw9NejreWIPivTS0WQbQ=","ARC-Authentication-Results":"i=1; server2.sourceware.org","Subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","From":"Jonathan Wakely via Sourceware Forge\n <forge-bot+redi@forge-stage.sourceware.org>","To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>","Date":"Mon, 08 Sep 2025 21:05:03 +0000","Message-ID":"\n <bmm.haxmkeniyo.gcc.gcc-TEST.redi.30.216.REVIEW@forge-stage.sourceware.org>","In-Reply-To":"\n <bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org>","X-Mailer":"batrachomyomachia","X-Pull-Request-Organization":"gcc","X-Pull-Request-Repository":"gcc-TEST","X-Pull-Request":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30","X-Review":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2074","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","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>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3680541,"web_url":"http://patchwork.ozlabs.org/comment/3680541/","msgid":"<bmm.haxmnjrvwg.gcc.gcc-TEST.redi.30.217.REVIEW@forge-stage.sourceware.org>","list_archive_url":null,"date":"2025-09-08T21:08:13","subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","submitter":{"id":93210,"url":"http://patchwork.ozlabs.org/api/people/93210/","name":"Jonathan Wakely via Sourceware Forge","email":"forge-bot+redi@forge-stage.sourceware.org"},"content":"Jonathan Wakely (redi) <redi@gcc.gnu.org>) commented on the code:\n\n\n> +++ libstdc++-v3/include/bits/predefined_ops.h\n> @@ -407,0 +476,4 @@\n> +#if __cplusplus >= 201103L\n> +  /// Generalized negator.\n> +  template<typename _Fn>\n> +    class _Not_fn\nEverything else in `<bits/predefined_ops.h>` is in namespace `__gnu_cxx`, so I'd prefer not to add `std::_Not_fn` there. It could be in a separate `<bits/not_fn.h>` header if it's needed for algos to use without including all of `<functional>`.\n\n\n--\nhttps://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2078","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=38.145.34.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 [38.145.34.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 4g0xdJ2Ybvz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:21:55 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 76EBB429EA79\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:21:49 +0000 (GMT)","from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id 949B84BB588C\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:22 +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 A3ABF42B8B\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:20 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 76EBB429EA79","OpenDKIM Filter v2.11.0 sourceware.org 949B84BB588C"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 949B84BB588C","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 949B84BB588C","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776854602; cv=none;\n b=RBsZNRiZpta5lnsrZZWV5oQ0UO6vb3D4jdhk9Gc2kDKYxzm1K92fNSRr6jLEEdi8FOsozIL+g2is0paW3shXK5oQH58aKs55p8f7+Xr3dwMCS6A7y5ZMkQL9hHZ9bWVBpUUvX4AZVMa0MOpb4IjhV1p14Lg8RIkJyvQBWZoy99M=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776854602; c=relaxed/simple;\n bh=7wpF4fJXLGCo1UsFcAu+mGGTj/J7MR8rO57JzwixH1o=;\n h=Subject:From:To:Date:Message-ID:MIME-Version;\n b=Y+HutZL2ANvDmPqX3YEDYaIyDg7SwGXoQIqojEMLevgCOuHdFp797NKocFboH1sPQA5jwdjVwBoj4q7X7gwCmUzR3s18DK90z7uA8BlHHNbFMpLkQxYhYT9SdSK/q7RIa91PSUk3+bYL/5/+SQSEvWS72UkZBMsM8P9tw2qiz8o=","ARC-Authentication-Results":"i=1; server2.sourceware.org","Subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","From":"Jonathan Wakely via Sourceware Forge\n <forge-bot+redi@forge-stage.sourceware.org>","To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>","Date":"Mon, 08 Sep 2025 21:08:13 +0000","Message-ID":"\n <bmm.haxmnjrvwg.gcc.gcc-TEST.redi.30.217.REVIEW@forge-stage.sourceware.org>","In-Reply-To":"\n <bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org>","X-Mailer":"batrachomyomachia","X-Pull-Request-Organization":"gcc","X-Pull-Request-Repository":"gcc-TEST","X-Pull-Request":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30","X-Review":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2078","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","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>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3680543,"web_url":"http://patchwork.ozlabs.org/comment/3680543/","msgid":"<bmm.hhubq0c0w0.gcc.gcc-TEST.forge-bot.30.5566.CMT@forge-stage.sourceware.org>","list_archive_url":null,"date":"2026-04-22T10:42:54","subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","submitter":{"id":93212,"url":"http://patchwork.ozlabs.org/api/people/93212/","name":"Lichenor Forgejo Bot via Sourceware Forge","email":"forge-bot+forge-bot@forge-stage.sourceware.org"},"content":"<!-- pr-new-version -->\nVersion 1 of this pull request has been stored. It includes the following commits:\n- libstdc++: Reimplement __gnu_cxx::__ops operators - 7f4c93adf8d0f3b08e642b14b01df7fb87d93e96\n\n\n--\nhttps://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-5566","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 4g0xdw6zSqz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:22:28 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 0405743413D4\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:22:27 +0000 (GMT)","from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id B3A1D4B92095\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:22 +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 D466542B8E\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:20 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 0405743413D4","OpenDKIM Filter v2.11.0 sourceware.org B3A1D4B92095"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org B3A1D4B92095","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org B3A1D4B92095","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776854602; cv=none;\n b=Xt/U2yx5DjITMhMpjMxdqojTfcpuq1tpStzj3G+3RhMb89MVRD/a3YTmCZYq0bWqAZ9U8DC39D3/C9l1JULrNoAksQ7kNUzIXMmF/ZeP1bSdoSeCPWY6Ngsq0/oTwS3rmyarxNu2J+HyIIAcvmq5xMEhSiaBqYHCJfiHyeu4Gcg=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776854602; c=relaxed/simple;\n bh=YsMJiu+raCsekBx/cytX0ddz42lu+xiyN5YTvjwIz9M=;\n h=Subject:From:To:Date:Message-ID:MIME-Version;\n b=A5Yt7r5SSeNOACjt7eklmNkHGbu6sJm1g7RIJu29GpcJBDb2MIRG5QbUN4ndN2SlJBgmI61oUBd+YE4WaCJ4MqYOThDggk3CQV6oJOY8HoS7cIuUQk/C2B9WVCQ0mA1EX5dQCaQXOtdc1QNF0X2deo9tqM4om54Hb8DHBoEla4Y=","ARC-Authentication-Results":"i=1; server2.sourceware.org","Subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","From":"Lichenor Forgejo Bot via Sourceware Forge\n <forge-bot+forge-bot@forge-stage.sourceware.org>","To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>","Date":"Wed, 22 Apr 2026 10:42:54 +0000","Message-ID":"\n <bmm.hhubq0c0w0.gcc.gcc-TEST.forge-bot.30.5566.CMT@forge-stage.sourceware.org>","In-Reply-To":"\n <bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org>","X-Mailer":"batrachomyomachia","X-Pull-Request-Organization":"gcc","X-Pull-Request-Repository":"gcc-TEST","X-Pull-Request":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30","X-Comment":"\n https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-5566","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","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>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3680544,"web_url":"http://patchwork.ozlabs.org/comment/3680544/","msgid":"<bmm.hb4ljn1qgw.gcc.gcc-TEST.fdumont.30.2199.CMT@forge-stage.sourceware.org>","list_archive_url":null,"date":"2025-09-15T04:50:29","subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","submitter":{"id":93220,"url":"http://patchwork.ozlabs.org/api/people/93220/","name":"François Dumont via Sourceware Forge","email":"forge-bot+fdumont@forge-stage.sourceware.org"},"content":"Supersede by PR #78\n\n--\nhttps://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2199","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=38.145.34.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 [38.145.34.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 4g0xgP3Zhyz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:23:45 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 807214332682\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:23:43 +0000 (GMT)","from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id D104C4B920DC\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:22 +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 DA22942B8F\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:43:20 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 807214332682","OpenDKIM Filter v2.11.0 sourceware.org D104C4B920DC"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org D104C4B920DC","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org D104C4B920DC","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776854602; cv=none;\n b=UFCcYX/NTN49f2C4XvfClRMTca57eM3ogtzQhftlmTc7ZkgfuACfwucep2AcR8mg2Bc4/aWQIk+6zp04RBysf+3b5rpNfqtdSD5eS7BM2LcBtxkIJg0+BNiU6u/bqI8iytEBF0kMCL1nL0uHoq5T7szWuUkDv2lADVLmpyEpFxE=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776854602; c=relaxed/simple;\n bh=zNB6ksOkRMiHTO1xgpvtFXw1xWjnOa8TYJZsXlKSMzs=;\n h=Subject:From:To:Date:Message-ID:MIME-Version;\n b=s/QCtfH5x5ml7gH2CtJL5RFWGqwI/B9XUKP1Y8CykouFcAWw33LZUOnJ2HhvsZ+X4Pte1IW5Dss9WhyhxlEUHxy2SJ6iQ0sbH1TjJpQAZ39f1cyNZkW9j1fvfsCeSG3DcHUXSV7aQ7AUXQKGmb6OoIeKj2sPjTeX0v4jLPDh/7s=","ARC-Authentication-Results":"i=1; server2.sourceware.org","Subject":"Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops functors","From":"=?utf-8?b?RnJhbsOnb2lz?= Dumont via Sourceware Forge\n <forge-bot+fdumont@forge-stage.sourceware.org>","To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>","Date":"Mon, 15 Sep 2025 04:50:29 +0000","Message-ID":"\n <bmm.hb4ljn1qgw.gcc.gcc-TEST.fdumont.30.2199.CMT@forge-stage.sourceware.org>","In-Reply-To":"\n <bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org>","X-Mailer":"batrachomyomachia","X-Pull-Request-Organization":"gcc","X-Pull-Request-Repository":"gcc-TEST","X-Pull-Request":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30","X-Comment":"\n https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2199","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","MIME-Version":"1.0","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>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}},{"id":3680545,"web_url":"http://patchwork.ozlabs.org/comment/3680545/","msgid":"<bmm.hhubr5c6tk.gcc.gcc-TEST.fdumont.30.1.SUMMARY@forge-stage.sourceware.org>","list_archive_url":null,"date":"2026-04-22T10:44:02","subject":"[SUMMARY] Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops\n functors","submitter":{"id":93220,"url":"http://patchwork.ozlabs.org/api/people/93220/","name":"François Dumont via Sourceware Forge","email":"forge-bot+fdumont@forge-stage.sourceware.org"},"content":"This is a summary of discussions relative to the merge request created by François Dumont (fdumont) <fdumont@gcc.gnu.org> titled\nlibstdc++: Reimplement __gnu_cxx::__ops functors\nsince its creation.\n\nDescription:     Replace functors using iterators as input to adopt functors that are\n    matching the same Standard expectations as the ones imposed on functor-aware\n    algos. It forces to have iterators dereferenced at algo level and not in the\n    predefined functors anymore. This way the functor used by functor-aware algos\n    do not need to be wrap anymore. Only the different flavour of '<', '==' and\n    '!' operators needed to be wrapped.\n    \n    Also make sure that in algos implementation helpers, functors are passed using\n    perfect forwarding rather than by copy. This way we can remove usage of std::refwrap\n    in std::erase_if implementations and instead use std::move.\n    \n    Additionnally improve __lower_bound/__upper_bound signatures. Those internal\n    functions have been introduced as implementation details of respectively\n    std::lower_bound/std::upper_bound. For this reason they are taking\n    the value argument as a const reference. The problem is that it's now being used\n    in algos like std::inplace_merge and std::stable_sort and so forces functor used\n    in those algos to take their arguments as const references. Using a rvalue references\n    __lower_bound/__upper_bound will automatically adapt to the usage context. The\n    limitation still exists in C++98.\n    \n    libstdc++-v3/ChangeLog:\n    \n            * include/bits/move.h\n            (_GLIBCXX_CP_FWDREF): New macro, substituted by a copy in pre-c++11 mode.\n            * include/std/functional: Include predefined_ops.h.\n            (_Not_fn): Move to...\n            * include/bits/predefined_ops.h: ...here, and expose a version\n            in pre-C++14 mode.\n            (__not_fn): New, use latter.\n            Include bits/stl_iterator_base_types.h.\n            Include bits/invoke.h.\n            (_Iter_less_iter, _Iter_less_val, _Val_less_iter, _Iter_equal_to_iter)\n            (_Iter_equal_to_val, _Iter_comp_iter, _Iter_comp_val, _Val_comp_iter)\n            (_Iter_equals_val, _Iter_equals_iter, _Iter_pred, _Iter_comp_val)\n            (_Iter_comp_to_val, _Iter_comp_to_iter, _Iter_negate): Remove.\n            (__iter_less_iter, __iter_less_val, __iter_comp_val, __val_less_iter)\n            (__val_comp_iter, __iter_equal_to_iter, __iter_equal_to_val, __iter_comp_iter)\n            (__val_comp_iter, __iter_equals_val, __iter_comp_iter, __pred_iter): Remove.\n            (_Less, _LessRefs<>, _LessCRef<>, _LessVal<>)\n            (_EqualTo, _EqualToRefs<>, _EqualToVal<>, _EqualVal<>, _EqualValRef<>)\n            (_CompVal): New.\n            (__less, __less_val, __equal_to, __comp_val, __equal_ite): New.\n            * include/bits/stl_algo.h: Adapt all algos to use new __gnu_cxx::__ops operators.\n            When possible use std::move to pass predicates to helpers and std::forward between\n            helpers.\n            * include/bits/stl_algobase.h: Likewise.\n            * include/bits/stl_heap.h: Likewise.\n            * include/std/deque: Cleanup usage of __gnu_cxx::__ops operators. Replace usage of\n            std::ref by std::move to pass predicate to std::__remove_if.\n            * include/std/inplace_vector: Likewise.\n            * include/std/string: Likewise.\n            * include/std/vector: Likewise.\n            * src/c++17/memory_resource.cc: Include <functional>.\n            * testsuite/25_algorithms/inplace_merge/1.cc (test5): New test case.\n            * testsuite/25_algorithms/stable_sort/1.cc (test4): New test case.\n\nThe full and up to date discussion can be found at https://forge.sourceware.org/gcc/gcc-TEST/pulls/30\n\nThe merge request has been closed without being merged directly on the forge repository.\n\n\nOn 2025-09-08 20:43:13+00:00, Jonathan Wakely (redi) wrote:\n\n@fdumont wrote in https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issue-45:\n> Additionnally improve __lower_bound/__upper_bound signatures. Those internal\n> functions have been introduced as implementation details of respectively\n> std::lower_bound/std::upper_bound. For this reason they are taking\n> the value argument as a const reference. The problem is that it's now being used\n> in algos like std::inplace_merge and std::stable_sort and so forces functor used\n> in those algos to take their arguments as const references. Using a rvalue references\n> __lower_bound/__upper_bound will automatically adapt to the usage context. The\n> limitation still exists in C++98.\n\nCould you explain this part? Do you mean that the functors used by inplace_merge and stable_sort cannot have signatures like `operator()(T&, T&)` ?  I think https://eel.is/c++draft/algorithms.requirements#7.sentence-5 means we don't need to support that.\n\nIn any case, that seems like a separate change that should be a separate commit?\n\nOn 2025-09-08 20:48:04+00:00, Jonathan Wakely (redi) <redi@gcc.gnu.org> commented on the code:\n\n\n> +++ libstdc++-v3/include/bits/predefined_ops.h\n> @@ -59,0 +90,4 @@\n> +    struct _LessCRef\n> +    : _LessRefs<typename std::iterator_traits<_Ite>::reference,\n> +\t\tconst typename std::iterator_traits<_Ite>::value_type&>\n> +    { };\nIs `_LessRefs` really necessary? Can't you just have one type that has overloaded `operator()`?\n\nIn my experiments with similar changes I was using the following:\n\n```c++\n#ifdef __glibcxx_transparent_operators // C++ >= 14\n# include <bits/stl_function.h>\n#endif\n\nnamespace __gnu_cxx\n{\nnamespace __ops\n{\n\n#ifdef __glibcxx_transparent_operators // C++ >= 14\n  using equal_to = std::equal_to<void>;\n  using less = std::less<void>;\n#else\n  struct equal_to\n  {\n#ifdef __cpp_rvalue_references\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp&& __t, _Up&& __u) const\n      { return __t == __u; }\n#else // C++98\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp& __t, _Up& __u) const { return __t == __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(const _Tp& __t, _Up& __u) const { return __t == __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp& __t, const _Up& __u) const { return __t == __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(const _Tp& __t, const _Up& __u) const { return __t == __u; }\n#endif\n  };\n\n  struct less\n  {\n#if __cplusplus >= 201103L\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp&& __t, _Up&& __u) const\n      { return __t < __u; }\n#else // C++98\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp& __t, _Up& __u) const { return __t < __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(const _Tp& __t, _Up& __u) const { return __t < __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(_Tp& __t, const _Up& __u) const { return __t < __u; }\n    template<typename _Tp, typename _Up>\n      bool\n      operator()(const _Tp& __t, const _Up& __u) const { return __t < __u; }\n#endif\n  };\n#endif\n```\n\nThis means we have `__gnu_cxx::__ops::less` and `__gnu_cxx::__ops::equal_to` but they're just reusing the existing `std::less<void>` and `std::equal_to<void>` types when possible, so we don't define new types.\n\nThis way there are no `__less` and `__less_val` functions to create these types, you just construct one as needed:  `__ops::less()`.\n\n\nOn 2025-09-08 21:01:10+00:00, Jonathan Wakely (redi) wrote:\n\n@fdumont wrote in https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issue-45:\n> Also make sure that in algos implementation helpers, functors are passed using\n> perfect forwarding rather than by copy. This way we can remove usage of std::refwrap\n> in std::erase_if implementations and instead use std::move.\n\nThis also seems like it should be a separate change. It's desirable, but it should be separate from removing the indirect ops that wrap iterators.\n\nOn 2025-09-08 21:03:13+00:00, Jonathan Wakely (redi) <redi@gcc.gnu.org> commented on the code:\n\n\n> +++ libstdc++-v3/src/c++17/memory_resource.cc\n> @@ -26,6 +26,7 @@\n>  #include <algorithm>\t\t\t// lower_bound, rotate\n>  #include <atomic>\n>  #include <bit>\t\t\t\t// has_single_bit, bit_ceil, bit_width\n> +#include <functional>\t\t\t// less_equal\nThis change to `memory_resource.cc` could be pushed separately, as an obvious fix.\n\nOn 2025-09-08 21:05:03+00:00, Jonathan Wakely (redi) <redi@gcc.gnu.org> commented on the code:\n\n\n> +++ libstdc++-v3/include/std/vector\n> @@ -123,3 +122,3 @@\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::move(__pred));\nIf somebody calls `erase_if<T, Alloc, Pred&>` to pass the predicate by lvalue reference, this change would cause it to be moved instead of copied. I'm not sure if we need to support that though.\n> +++ libstdc++-v3/include/std/vector\n> @@ -123,3 +122,3 @@\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::move(__pred));\nhttps://cplusplus.github.io/LWG/issue3419 means we don't have to support that\n\nOn 2025-09-08 21:08:13+00:00, Jonathan Wakely (redi) <redi@gcc.gnu.org> commented on the code:\n\n\n> +++ libstdc++-v3/include/bits/predefined_ops.h\n> @@ -407,0 +476,4 @@\n> +#if __cplusplus >= 201103L\n> +  /// Generalized negator.\n> +  template<typename _Fn>\n> +    class _Not_fn\nEverything else in `<bits/predefined_ops.h>` is in namespace `__gnu_cxx`, so I'd prefer not to add `std::_Not_fn` there. It could be in a separate `<bits/not_fn.h>` header if it's needed for algos to use without including all of `<functional>`.\n\nOn 2025-09-08 23:48:12+00:00, Jonathan Wakely (redi) <redi@gcc.gnu.org> commented on the code:\nThis is my experiment to replace the predefined ops:\n\nhttps://forge.sourceware.org/gcc/gcc-TEST/compare/trunk...redi:remove-predefined-ops\n\n\n\nOn 2025-09-09 00:37:37+00:00, Jonathan Wakely (redi) wrote:\n\n@redi wrote in https://forge.sourceware.org/gcc/gcc-TEST/pulls/30#issuecomment-2063:\n\n> @fdumont wrote in #30 (comment):\n> \n> > Additionnally improve __lower_bound/__upper_bound signatures. Those internal\n> > functions have been introduced as implementation details of respectively\n> > std::lower_bound/std::upper_bound. For this reason they are taking\n> > the value argument as a const reference. The problem is that it's now being used\n> > in algos like std::inplace_merge and std::stable_sort and so forces functor used\n> > in those algos to take their arguments as const references. Using a rvalue references\n> > __lower_bound/__upper_bound will automatically adapt to the usage context. The\n> > limitation still exists in C++98.\n> \n> Could you explain this part? Do you mean that the functors used by inplace_merge and stable_sort cannot have signatures like `operator()(T&, T&)` ? I think https://eel.is/c++draft/algorithms.requirements#7.sentence-5 means we don't need to support that.\n> \n> In any case, that seems like a separate change that should be a separate commit?\n\nThat was changed in the standard by https://cplusplus.github.io/LWG/issue3031 which makes things easier for us\n\n\nOn 2025-09-15 04:50:29+00:00, François Dumont (fdumont) wrote:\n\nSupersede by PR #78\n\n\nOn 2026-04-22 10:42:54+00:00, Lichenor Forgejo Bot (forge-bot) wrote:\n\n<!-- pr-new-version -->\nVersion 1 of this pull request has been stored. It includes the following commits:\n- libstdc++: Reimplement __gnu_cxx::__ops operators - 7f4c93adf8d0f3b08e642b14b01df7fb87d93e96\n\n\n\nOn 2026-04-22 10:43:19+00:00, Lichenor Forgejo Bot (forge-bot) wrote:\n\nSent patch series version 1 containing 1 patches to gcc-patches mailing list <gcc-patches@gcc.gnu.org>.\n[Cover letter](https://inbox.sourceware.org/gcc-patches/bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org)","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=38.145.34.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 [38.145.34.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 4g0xj639jFz1yCv\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:25:14 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 9907843313C1\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 11:25:12 +0000 (GMT)","from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id 9BFD0453E44D\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:44:02 +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 7259742B83\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 10:44:02 +0000 (UTC)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 9907843313C1","OpenDKIM Filter v2.11.0 sourceware.org 9BFD0453E44D"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 9BFD0453E44D","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 9BFD0453E44D","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776854642; cv=none;\n b=aycTkra9bra5kEN0EA3EsZUMIFF+jzvs/E0X3OIiCXyA6RNpiDFwRH/oqlldSwdcNzdsnpjnjXb8JvJZYeb8FMvjezdQMWUYiwyvCkCVmGtx87dgaFBYGGG2n9i2W+ojYEbERZCgdU//qCycj/ruDX7Dl3Iy15p9Gt26I0jW7LM=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776854642; c=relaxed/simple;\n bh=V8ZnMra3Rkgm96j/phG7JhguiiTQWC23nJP2L0TRMVk=;\n h=Subject:From:To:Message-ID:MIME-Version:Date;\n b=qDvs0WAoya67iiXp3WBfoZEALj11htWBxEhPAdedeQzTSc+tpqn4vWGenh5TggA1wIMIGW3eQmQpnYFEH17j10WOGlvrONFpPU5Mcku+97ZE5IpgBVgGn4hkhn3sHo0emr0oVvgDEM72h0czxXIBx0PZHiPD+mF5sLJrMEE2P7I=","ARC-Authentication-Results":"i=1; server2.sourceware.org","Subject":"[SUMMARY] Re: [PATCH v1 0/1] libstdc++: Reimplement __gnu_cxx::__ops\n functors","From":"=?utf-8?b?RnJhbsOnb2lz?= Dumont via Sourceware Forge\n <forge-bot+fdumont@forge-stage.sourceware.org>","To":"gcc-patches mailing list <gcc-patches@gcc.gnu.org>","In-Reply-To":"\n <bmm.hhubpmz4v8.gcc.gcc-TEST.fdumont.30.1.0@forge-stage.sourceware.org>","Message-ID":"\n <bmm.hhubr5c6tk.gcc.gcc-TEST.fdumont.30.1.SUMMARY@forge-stage.sourceware.org>","X-Mailer":"batrachomyomachia","X-Pull-Request-Organization":"gcc","X-Pull-Request-Repository":"gcc-TEST","X-Pull-Request":"https://forge.sourceware.org/gcc/gcc-TEST/pulls/30","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"quoted-printable","MIME-Version":"1.0","Date":"Wed, 22 Apr 2026 10:44:02 +0000 (UTC)","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>","Errors-To":"gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"}}]