[{"id":3681187,"web_url":"http://patchwork.ozlabs.org/comment/3681187/","msgid":"<CACb0b4mj-AUJwG0tFqoHvObSjp_X3adn7PQm-s1ztJAtH2qOyw@mail.gmail.com>","list_archive_url":null,"date":"2026-04-22T19:19:56","subject":"Re: [PATCH] libstdc++: Include bool conversion in noexcept\n specification of indirect::operator==.","submitter":{"id":48004,"url":"http://patchwork.ozlabs.org/api/people/48004/","name":"Jonathan Wakely","email":"jwakely@redhat.com"},"content":"On Wed, 22 Apr 2026 at 15:18, Tomasz Kamiński <tkaminsk@redhat.com> wrote:\n>\n> This expands the resolution of LWG4325 to heterogenous comparision\n> with T per standard draft (see corresponding commit [1]).\n>\n> [1] https://github.com/cplusplus/draft/pull/8935/changes/833d635d648cdbd06c9935acccf925ee0aea3c79\n>\n> libstdc++-v3/ChangeLog:\n>\n>         * include/bits/indirect.h (indirect::operator==): Adjust\n>         noexcept specification.\n>         * testsuite/std/memory/indirect/relops.cc: New test for noexcept\n>         specification.\n> ---\n> Tested only *indirect* test at this moment. Will not be able to merge\n> it until tomorrow.\n>\n> Testing on x86_64-linux. OK for trunk if all test passes?\n\nOK for trunk.\n\n>\n>  libstdc++-v3/include/bits/indirect.h          |  4 +-\n>  .../testsuite/std/memory/indirect/relops.cc   | 43 +++++++++++++++++++\n>  2 files changed, 45 insertions(+), 2 deletions(-)\n>\n> diff --git a/libstdc++-v3/include/bits/indirect.h b/libstdc++-v3/include/bits/indirect.h\n> index 6490a77a507..5be6713eaf3 100644\n> --- a/libstdc++-v3/include/bits/indirect.h\n> +++ b/libstdc++-v3/include/bits/indirect.h\n> @@ -336,7 +336,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n>         requires requires (const _Tp& __t, const _Up& __u) { __t == __u; }\n>         friend constexpr bool\n>         operator==(const indirect& __lhs, const indirect<_Up, _Alloc2>& __rhs)\n> -       noexcept(noexcept(*__lhs == *__rhs))\n> +       noexcept(noexcept(bool(*__lhs == *__rhs)))\n>         {\n>           if (!__lhs._M_objp || !__rhs._M_objp)\n>             return bool(__lhs._M_objp) == bool(__rhs._M_objp);\n> @@ -349,7 +349,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n>           && requires (const _Tp& __t, const _Up& __u) { __t == __u; }\n>         friend constexpr bool\n>         operator==(const indirect<_Vp, _Alloc>& __lhs, const _Up& __rhs)\n> -       noexcept(noexcept(*__lhs == __rhs))\n> +       noexcept(noexcept(bool(*__lhs == __rhs)))\n>         {\n>           if (!__lhs._M_objp)\n>             return false;\n> diff --git a/libstdc++-v3/testsuite/std/memory/indirect/relops.cc b/libstdc++-v3/testsuite/std/memory/indirect/relops.cc\n> index 77d599c8086..25ebf524e2b 100644\n> --- a/libstdc++-v3/testsuite/std/memory/indirect/relops.cc\n> +++ b/libstdc++-v3/testsuite/std/memory/indirect/relops.cc\n> @@ -68,11 +68,54 @@ test_hash()\n>    (void)std::hash<std::indirect<Obj>>{}(i);\n>  }\n>\n> +template<bool Noexcept>\n> +struct BoolConv\n> +{\n> +  bool b;\n> +\n> +  constexpr BoolConv(bool p) noexcept\n> +  : b(p)\n> +  { }\n> +\n> +  constexpr operator bool() const noexcept(Noexcept)\n> +  { return b; }\n> +};\n> +\n> +template<bool NoexceptEq, typename Ret = bool>\n> +struct Comp\n> +{\n> +  friend constexpr Ret\n> +  operator==(const Comp&, const Comp&) noexcept(NoexceptEq)\n> +  { return true; }\n> +};\n> +\n> +template<bool NoexceptEq, typename T>\n> +void test_noexcept(T t)\n> +{\n> +  std::indirect<T> i(t);\n> +  static_assert(noexcept(i == t) == NoexceptEq);\n> +  static_assert(noexcept(i != t) == NoexceptEq);\n> +  static_assert(noexcept(i == i) == NoexceptEq);\n> +  static_assert(noexcept(i != i) == NoexceptEq);\n> +}\n> +\n> +void test_noexcept()\n> +{\n> +  test_noexcept<true>(Comp<true>());\n> +  test_noexcept<false>(Comp<false>());\n> +\n> +  test_noexcept<true>(Comp<true, BoolConv<true>>());\n> +  test_noexcept<false>(Comp<true, BoolConv<false>>());\n> +  test_noexcept<false>(Comp<false, BoolConv<true>>());\n> +  test_noexcept<false>(Comp<false, BoolConv<false>>());\n> +}\n> +\n>  int main()\n>  {\n>    test_relops();\n>    test_comp_with_t();\n>    test_hash();\n> +  test_noexcept();\n>\n>    static_assert([] {\n>      test_relops();\n> --\n> 2.53.0\n>","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\tdkim=pass (1024-bit key;\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=bRp6ocl1;\n\tdkim-atps=neutral","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;\n\tdkim=pass (1024-bit key,\n unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256\n header.s=mimecast20190719 header.b=bRp6ocl1","sourceware.org; dmarc=pass (p=quarantine dis=none)\n header.from=redhat.com","sourceware.org; spf=pass smtp.mailfrom=redhat.com","server2.sourceware.org;\n arc=none smtp.remote-ip=170.10.129.124"],"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 4g1CjH4xmpz1yDD\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 07:56:19 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id A363D4B8A6A5\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 21:56:17 +0000 (GMT)","from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.129.124])\n by sourceware.org (Postfix) with ESMTP id 627D84AA8193\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 19:20:16 +0000 (GMT)","from mail-yw1-f198.google.com (mail-yw1-f198.google.com\n [209.85.128.198]) by relay.mimecast.com with ESMTP with STARTTLS\n (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id\n us-mta-501-Ix1MrEviMxWw7aJi0a3_JQ-1; Wed, 22 Apr 2026 15:20:14 -0400","by mail-yw1-f198.google.com with SMTP id\n 00721157ae682-7a3715e9e69so195461727b3.0\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 12:20:14 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org A363D4B8A6A5","OpenDKIM Filter v2.11.0 sourceware.org 627D84AA8193"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 627D84AA8193","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 627D84AA8193","ARC-Seal":"i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776885616; cv=none;\n b=SncK1yQoeBihxsNKUt1iTaECcazm04NU9c6vqYebNXoukmuZt/yaVQ0pApvLEum4ElJh9zukphN23A6eUJ81FCa4isZvkpUuiyRrqVnkTFjpdkt5fPou0S60N8TreW417Pzo/2rDrBMgjoJWzT3CFnLV+ihg9jI6Nw2MKp2/0iI=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776885616; c=relaxed/simple;\n bh=pWRIzCcnFCLz3SDBcNjlFNkqYLEOaBdCWgck3l3mAJc=;\n h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To;\n b=OjzHYao63DOhgXFoipOHjuRk3nwm4zeyamxr83n2CNkGsUO1zo2m7tmzAfouyfVz/+88eOCfnyOmadw5LmVZr3cQpNV94zGP4AL0jmX4hRoEw2PUoImbotBVaexlevpRTEEBHOOrRawClgFOXbz7kQ/6HVRjMZiHwtc0PewVSyE=","ARC-Authentication-Results":"i=1; server2.sourceware.org","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com;\n s=mimecast20190719; t=1776885616;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding:\n in-reply-to:in-reply-to:references:references;\n bh=j0moStBwae7CBA02fX8c89iKjWKaHjHUiBGB+w2meJE=;\n b=bRp6ocl1LYUHFYogNyh0ZiL715Kj+Tbv9Wcjf2ZroHCNieZZ0i00EfnZpwELA70RyOlUki\n jdaQHMgv/TTPaHOzsCUcSyJwMLLI+xpxVCy5juHZJyA43Aj9l9VLkttP8pzo2U5w87SFfb\n 6KCApPld/1qjtOPbQVtnHjkkOS6q4Bw=","X-MC-Unique":"Ix1MrEviMxWw7aJi0a3_JQ-1","X-Mimecast-MFC-AGG-ID":"Ix1MrEviMxWw7aJi0a3_JQ_1776885614","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1776885614; x=1777490414;\n h=content-transfer-encoding:cc:to:subject:message-id:date:from\n :in-reply-to:references:mime-version:x-gm-gg:x-gm-message-state:from\n :to:cc:subject:date:message-id:reply-to;\n bh=j0moStBwae7CBA02fX8c89iKjWKaHjHUiBGB+w2meJE=;\n b=G/d9lvFworNz2qVqnt0xfpq6HxiE4++V0L/2r3qJOQdAhevCr2NtXTuyTCDpksGE4w\n d4qdDGHoc2yEf+mxzrWnlLopibc1oAwR8CrCkRT9SW7AcEym0NPShxxKg8JyjYM3/J8T\n m16DW3SJheCdrDd6nprpWadmtkInBe3/aSUcgk6JSAs3xGqi1AwtiGUm/ZlADSO3xTXz\n A00i4Vt68IhX73PfCZKJnVB5iBLxKREjqeQutD7aITE43mUA/r1WNpKxfN4pRrZNMhG2\n w+lzx9s8uvRKbwDBG9WSxmjcp/tuir8ufva0+8yEwC7KoPKTMrXkOEDCFW7aTYyabM5f\n srtg==","X-Forwarded-Encrypted":"i=1;\n AFNElJ88gojHB9J0i/2USX3nRMQlE0fyjf+Cxc77CH+nPN2P3XPwLRQf64BDfp++Cyi6C1tH/FrT/9Gdvhjsvg==@gcc.gnu.org","X-Gm-Message-State":"AOJu0YxZ1xjoQv1uz7SgR4sCascHVJdeU1mqix7JvyNIrKi+QnDWqRN2\n lNthH+2Fzh0DOtMhqv4zZZxsad9VmmBKSR6o3yS/xIUoo6Z8I3RiybgRL4nGyrjFVR9O0jE5F3U\n iUo1IYYmz6HKH499uToEVW85/Rb0l6B6A4/Jf3g/Gk0naohXvFwdSDR34kl14BIG9JlhSFwd+tm\n uXHEn+t65x/2BVCTNJlDz81yT+Kb7GrkEKng==","X-Gm-Gg":"AeBDiesTj+sn0phQiTJnOQG+b0o8S5kkpFVdJVzwvjDXtLp2y5soc4zEvkvXnvEx5Gj\n RPrz/YDfYLMzdTakJHPFqXfO64HH5ngQRmgT+zcGi2x5ZgFrDYzwZLg/bq0wzXjND122V814wur\n Ud5p4JeAsg7TcshlEIQM3o/w/VhMBdr/i/qCCrKzqQAyNcstghlcCLtTF7nn5hntr6Qbx5anJMp\n DLWWrP+kjmlcJWFIkyFwbTtXdoLVecdzoDrIjm1YdLsOV7x0jJ7MHLfg/eJ8YlhyO4vV6R39ZbP\n bg==","X-Received":["by 2002:a05:690e:4012:b0:650:26c1:ee84 with SMTP id\n 956f58d0204a3-653119490b8mr17189555d50.11.1776885613646;\n Wed, 22 Apr 2026 12:20:13 -0700 (PDT)","by 2002:a05:690e:4012:b0:650:26c1:ee84 with SMTP id\n 956f58d0204a3-653119490b8mr17189536d50.11.1776885613253; Wed, 22 Apr 2026\n 12:20:13 -0700 (PDT)"],"MIME-Version":"1.0","References":"<20260422141753.1133689-1-tkaminsk@redhat.com>","In-Reply-To":"<20260422141753.1133689-1-tkaminsk@redhat.com>","From":"Jonathan Wakely <jwakely@redhat.com>","Date":"Wed, 22 Apr 2026 20:19:56 +0100","X-Gm-Features":"AQROBzBAvAXrQ8dte3T7Gdw1L-bVfo8Vnr7_skwtGym39pH0177cq4bKeMmVBPE","Message-ID":"\n <CACb0b4mj-AUJwG0tFqoHvObSjp_X3adn7PQm-s1ztJAtH2qOyw@mail.gmail.com>","Subject":"Re: [PATCH] libstdc++: Include bool conversion in noexcept\n specification of indirect::operator==.","To":"=?utf-8?q?Tomasz_Kami=C5=84ski?= <tkaminsk@redhat.com>","Cc":"libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org","X-Mimecast-Spam-Score":"0","X-Mimecast-MFC-PROC-ID":"yfXCdbdcB-SggBm1fKyfkV3qhrc3BEac3zsPG6ob_nM_1776885614","X-Mimecast-Originator":"redhat.com","Content-Type":"text/plain; charset=\"UTF-8\"","Content-Transfer-Encoding":"quoted-printable","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"}}]