get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2218500,
    "url": "http://patchwork.ozlabs.org/api/patches/2218500/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/20260401100649.450041-1-jwakely@redhat.com/",
    "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": "<20260401100649.450041-1-jwakely@redhat.com>",
    "list_archive_url": null,
    "date": "2026-04-01T10:06:31",
    "name": "libstdc++: Rename saturation arithmetic for C++26 (P4052R0)",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "9e1d5bc27dd965cbf4318fe5d399728d2442d1be",
    "submitter": {
        "id": 48004,
        "url": "http://patchwork.ozlabs.org/api/people/48004/?format=api",
        "name": "Jonathan Wakely",
        "email": "jwakely@redhat.com"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/20260401100649.450041-1-jwakely@redhat.com/mbox/",
    "series": [
        {
            "id": 498307,
            "url": "http://patchwork.ozlabs.org/api/series/498307/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=498307",
            "date": "2026-04-01T10:06:31",
            "name": "libstdc++: Rename saturation arithmetic for C++26 (P4052R0)",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/498307/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2218500/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2218500/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\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=VdKIRI2S;\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=VdKIRI2S",
            "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.133.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 4fm0zJ5JyLz1xtJ\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 01 Apr 2026 21:07:40 +1100 (AEDT)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id A875D4BA23E4\n\tfor <incoming@patchwork.ozlabs.org>; Wed,  1 Apr 2026 10:07:38 +0000 (GMT)",
            "from us-smtp-delivery-124.mimecast.com\n (us-smtp-delivery-124.mimecast.com [170.10.133.124])\n by sourceware.org (Postfix) with ESMTP id DA1054BA2E36\n for <gcc-patches@gcc.gnu.org>; Wed,  1 Apr 2026 10:06:56 +0000 (GMT)",
            "from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com\n (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by\n relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3,\n cipher=TLS_AES_256_GCM_SHA384) id us-mta-92-pDQH41nCO8SwyabnDGGMGQ-1; Wed,\n 01 Apr 2026 06:06:53 -0400",
            "from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com\n (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17])\n (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS\n id 74F281800365; Wed,  1 Apr 2026 10:06:52 +0000 (UTC)",
            "from zen.kayari.org (unknown [10.44.48.64])\n by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP\n id 04F8B1954102; Wed,  1 Apr 2026 10:06:50 +0000 (UTC)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org A875D4BA23E4",
            "OpenDKIM Filter v2.11.0 sourceware.org DA1054BA2E36"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org DA1054BA2E36",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org DA1054BA2E36",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1775038017; cv=none;\n b=niaxzGRnmo0JvEnBMbtHHdvHdkb5YZZOAcX+g7UUeTWf6X8foGaI4LvYmqnbyiTjgxPz7tYVe/gGAHvOmplTdGJtwDNK8t8/Xq0hmFN5uH2K1SIRZGQMLO+ahLLcxXY4vh2xUsN7/r9Gb2+gPR6TbeVxM6QfSwLdiJIspA+flUE=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1775038017; c=relaxed/simple;\n bh=XghpiVYI3QgttJGyxb1mnbw0UJNbb5S66GzbfCvXWB4=;\n h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version;\n b=ghIipexGiEeFAGdtSjTTNlLGO0Xw0pp4DvLFh/wBPRiVXasI+n2+D5+TKRMpTY6dcLxMg/aAHx4/T/YJ4vkmLelAW3yr8mdSV3poF1RbftpiEnLp+3xO0zvObMREZfBgaqTgyphqGCAojBUfoqFJv/cH6fsZ9qIcwK4IS9wzed8=",
        "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=1775038016;\n h=from:from:reply-to:subject:subject:date:date:message-id:message-id:\n to:to:cc:mime-version:mime-version:content-type:content-type:\n content-transfer-encoding:content-transfer-encoding;\n bh=JTZWIsN+HU/MJeFQQDWLVREOccdL4unbtmIzmcGwqhk=;\n b=VdKIRI2SzUpzHYDCF3OluvdPmQPsoQb9SwwEaQwOn5YmEQokBA4F3Yw29PJfdBS0MPL8ET\n Ak3rayi0hRm2Geei3pUuQfpx3J5py8uAz/F0svWltxya6iZSl3QWzPjZAys/6C8NpGwsfV\n QdWVGuhciXn3zlvnzXDLP5urhsQ/Bb4=",
        "X-MC-Unique": "pDQH41nCO8SwyabnDGGMGQ-1",
        "X-Mimecast-MFC-AGG-ID": "pDQH41nCO8SwyabnDGGMGQ_1775038012",
        "From": "Jonathan Wakely <jwakely@redhat.com>",
        "To": "gcc-patches@gcc.gnu.org,\n\tlibstdc++@gcc.gnu.org",
        "Subject": "[PATCH] libstdc++: Rename saturation arithmetic for C++26 (P4052R0)",
        "Date": "Wed,  1 Apr 2026 11:06:31 +0100",
        "Message-ID": "<20260401100649.450041-1-jwakely@redhat.com>",
        "MIME-Version": "1.0",
        "X-Scanned-By": "MIMEDefang 3.0 on 10.30.177.17",
        "X-Mimecast-Spam-Score": "0",
        "X-Mimecast-MFC-PROC-ID": "7jelbSFsnhUQsdkxIJY2VHEVfU_FxZlgiARzeMslfKk_1775038012",
        "X-Mimecast-Originator": "redhat.com",
        "Content-Type": "text/plain",
        "Content-Transfer-Encoding": "8bit",
        "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"
    },
    "content": "Last week in Croydon we approved P4052R0 to rename std::add_sat etc. for\nC++26\n\nlibstdc++-v3/ChangeLog:\n\n\t* include/bits/sat_arith.h (add_sat, sub_sat, mul_sat, div_sat)\n\t(saturate_cast): Rename to saturating_xxx as per P4052R0.\n\t* include/bits/version.def (saturation_arithmetic): Bump value.\n\t* include/bits/version.h: Regenerate.\n\t* testsuite/26_numerics/saturation/add.cc: Use new name.\n\t* testsuite/26_numerics/saturation/cast.cc: Likewise.\n\t* testsuite/26_numerics/saturation/div.cc: Likewise.\n\t* testsuite/26_numerics/saturation/extended.cc: Likewise.\n\t* testsuite/26_numerics/saturation/mul.cc: Likewise.\n\t* testsuite/26_numerics/saturation/sub.cc: Likewise.\n\t* testsuite/26_numerics/saturation/version.cc: Check for updated\n\tvalue.\n---\n\nTested x86_64-linux.\n\n libstdc++-v3/include/bits/sat_arith.h         |  10 +-\n libstdc++-v3/include/bits/version.def         |   2 +-\n libstdc++-v3/include/bits/version.h           |   4 +-\n .../testsuite/26_numerics/saturation/add.cc   |  82 ++++++-------\n .../testsuite/26_numerics/saturation/cast.cc  |  30 ++---\n .../testsuite/26_numerics/saturation/div.cc   |  36 +++---\n .../26_numerics/saturation/extended.cc        |  26 ++---\n .../testsuite/26_numerics/saturation/mul.cc   |  38 +++---\n .../testsuite/26_numerics/saturation/sub.cc   | 108 +++++++++---------\n .../26_numerics/saturation/version.cc         |   4 +-\n 10 files changed, 170 insertions(+), 170 deletions(-)",
    "diff": "diff --git a/libstdc++-v3/include/bits/sat_arith.h b/libstdc++-v3/include/bits/sat_arith.h\nindex bce86d919919..7f0149de0ecf 100644\n--- a/libstdc++-v3/include/bits/sat_arith.h\n+++ b/libstdc++-v3/include/bits/sat_arith.h\n@@ -48,7 +48,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n   /// Add two integers, with saturation in case of overflow.\n   template<typename _Tp> requires __is_signed_or_unsigned_integer<_Tp>::value\n     constexpr _Tp\n-    add_sat(_Tp __x, _Tp __y) noexcept\n+    saturating_add(_Tp __x, _Tp __y) noexcept\n     {\n       _Tp __z;\n       if (!__builtin_add_overflow(__x, __y, &__z))\n@@ -64,7 +64,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n   /// Subtract one integer from another, with saturation in case of overflow.\n   template<typename _Tp> requires __is_signed_or_unsigned_integer<_Tp>::value\n     constexpr _Tp\n-    sub_sat(_Tp __x, _Tp __y) noexcept\n+    saturating_sub(_Tp __x, _Tp __y) noexcept\n     {\n       _Tp __z;\n       if (!__builtin_sub_overflow(__x, __y, &__z))\n@@ -80,7 +80,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n   /// Multiply two integers, with saturation in case of overflow.\n   template<typename _Tp> requires __is_signed_or_unsigned_integer<_Tp>::value\n     constexpr _Tp\n-    mul_sat(_Tp __x, _Tp __y) noexcept\n+    saturating_mul(_Tp __x, _Tp __y) noexcept\n     {\n       _Tp __z;\n       if (!__builtin_mul_overflow(__x, __y, &__z))\n@@ -96,7 +96,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n   /// Divide one integer by another, with saturation in case of overflow.\n   template<typename _Tp> requires __is_signed_or_unsigned_integer<_Tp>::value\n     constexpr _Tp\n-    div_sat(_Tp __x, _Tp __y) noexcept\n+    saturating_div(_Tp __x, _Tp __y) noexcept\n     {\n       __glibcxx_assert(__y != 0);\n       if constexpr (is_signed_v<_Tp>)\n@@ -110,7 +110,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n     requires __is_signed_or_unsigned_integer<_Res>::value\n       && __is_signed_or_unsigned_integer<_Tp>::value\n     constexpr _Res\n-    saturate_cast(_Tp __x) noexcept\n+    saturating_cast(_Tp __x) noexcept\n     {\n       constexpr int __digits_R = __gnu_cxx::__int_traits<_Res>::__digits;\n       constexpr int __digits_T = __gnu_cxx::__int_traits<_Tp>::__digits;\ndiff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def\nindex bb513e391d76..8c9ec854d3b2 100644\n--- a/libstdc++-v3/include/bits/version.def\n+++ b/libstdc++-v3/include/bits/version.def\n@@ -2157,7 +2157,7 @@ ftms = {\n ftms = {\n   name = saturation_arithmetic;\n   values = {\n-    v = 202311;\n+    v = 202603;\n     cxxmin = 26;\n   };\n };\ndiff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h\nindex e469944208a7..836aae02d773 100644\n--- a/libstdc++-v3/include/bits/version.h\n+++ b/libstdc++-v3/include/bits/version.h\n@@ -2418,9 +2418,9 @@\n \n #if !defined(__cpp_lib_saturation_arithmetic)\n # if (__cplusplus >  202302L)\n-#  define __glibcxx_saturation_arithmetic 202311L\n+#  define __glibcxx_saturation_arithmetic 202603L\n #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_saturation_arithmetic)\n-#   define __cpp_lib_saturation_arithmetic 202311L\n+#   define __cpp_lib_saturation_arithmetic 202603L\n #  endif\n # endif\n #endif /* !defined(__cpp_lib_saturation_arithmetic) */\ndiff --git a/libstdc++-v3/testsuite/26_numerics/saturation/add.cc b/libstdc++-v3/testsuite/26_numerics/saturation/add.cc\nindex 3eee6abca9a1..2695f7296112 100644\n--- a/libstdc++-v3/testsuite/26_numerics/saturation/add.cc\n+++ b/libstdc++-v3/testsuite/26_numerics/saturation/add.cc\n@@ -7,67 +7,67 @@\n \n template<typename T, typename U>\n concept can_add_sat\n-  = requires(T t, U u) { { std::add_sat(t, u) } -> std::same_as<T>; };\n+  = requires(T t, U u) { { std::saturating_add(t, u) } -> std::same_as<T>; };\n \n static_assert( can_add_sat<int, int> );\n static_assert( not can_add_sat<int, short> );\n static_assert( not can_add_sat<unsigned, int> );\n-static_assert( noexcept(std::add_sat(0, 0)) );\n+static_assert( noexcept(std::saturating_add(0, 0)) );\n \n-using std::add_sat;\n+using std::saturating_add;\n \n // Signed type\n-static_assert(add_sat(0, 0) == 0);\n-static_assert(add_sat(1, 1) == 2);\n-static_assert(add_sat(-1, -1) == -2);\n-static_assert(add_sat(-1, 1) == 0);\n+static_assert(saturating_add(0, 0) == 0);\n+static_assert(saturating_add(1, 1) == 2);\n+static_assert(saturating_add(-1, -1) == -2);\n+static_assert(saturating_add(-1, 1) == 0);\n constexpr auto max = std::numeric_limits<int>::max();\n constexpr auto min = std::numeric_limits<int>::min();\n-static_assert(add_sat(max, 1) == max);\n-static_assert(add_sat(1, max) == max);\n-static_assert(add_sat(max, max) == max);\n-static_assert(add_sat(min, -1) == min);\n-static_assert(add_sat(-1, min) == min);\n-static_assert(add_sat(min, min) == min);\n-static_assert(add_sat(max, min) == -1);\n-static_assert(add_sat(min, max) == -1);\n+static_assert(saturating_add(max, 1) == max);\n+static_assert(saturating_add(1, max) == max);\n+static_assert(saturating_add(max, max) == max);\n+static_assert(saturating_add(min, -1) == min);\n+static_assert(saturating_add(-1, min) == min);\n+static_assert(saturating_add(min, min) == min);\n+static_assert(saturating_add(max, min) == -1);\n+static_assert(saturating_add(min, max) == -1);\n \n // Wider signed type than the args\n-static_assert(add_sat<long long>(max, max) == (long long)max * 2);\n-static_assert(add_sat<long long>(min, min) == (long long)min * 2);\n+static_assert(saturating_add<long long>(max, max) == (long long)max * 2);\n+static_assert(saturating_add<long long>(min, min) == (long long)min * 2);\n \n // Signed type that undergoes integer promotion\n constexpr auto shrt_max = std::numeric_limits<short>::max();\n constexpr auto shrt_min = std::numeric_limits<short>::min();\n-static_assert(add_sat<short>(0, 0) == 0);\n-static_assert(add_sat<short>(1, 1) == 2);\n-static_assert(add_sat<short>(shrt_max, shrt_max) == shrt_max);\n-static_assert(add_sat<short>(shrt_max, 1) == shrt_max);\n-static_assert(add_sat<short>(1, shrt_max) == shrt_max);\n-static_assert(add_sat<short>(shrt_min, (short)-1) == shrt_min);\n-static_assert(add_sat<short>((short)-1, shrt_min) == shrt_min);\n-static_assert(add_sat<short>(shrt_min, (short)1) == -shrt_max);\n-static_assert(add_sat<short>((short)1, shrt_min) == -shrt_max);\n+static_assert(saturating_add<short>(0, 0) == 0);\n+static_assert(saturating_add<short>(1, 1) == 2);\n+static_assert(saturating_add<short>(shrt_max, shrt_max) == shrt_max);\n+static_assert(saturating_add<short>(shrt_max, 1) == shrt_max);\n+static_assert(saturating_add<short>(1, shrt_max) == shrt_max);\n+static_assert(saturating_add<short>(shrt_min, (short)-1) == shrt_min);\n+static_assert(saturating_add<short>((short)-1, shrt_min) == shrt_min);\n+static_assert(saturating_add<short>(shrt_min, (short)1) == -shrt_max);\n+static_assert(saturating_add<short>((short)1, shrt_min) == -shrt_max);\n \n // Unsigned type\n-static_assert(add_sat(0u, 0u) == 0u);\n-static_assert(add_sat(1u, 1u) == 2u);\n+static_assert(saturating_add(0u, 0u) == 0u);\n+static_assert(saturating_add(1u, 1u) == 2u);\n constexpr auto umax = std::numeric_limits<unsigned>::max();\n-static_assert(add_sat(umax, 1u) == umax);\n-static_assert(add_sat(1u, umax) == umax);\n-static_assert(add_sat(umax, umax) == umax);\n-static_assert(add_sat(0u, umax) == umax);\n-static_assert(add_sat(umax, 0u) == umax);\n-static_assert(add_sat(0u, 1u) == 1u);\n-static_assert(add_sat(1u, 0u) == 1u);\n+static_assert(saturating_add(umax, 1u) == umax);\n+static_assert(saturating_add(1u, umax) == umax);\n+static_assert(saturating_add(umax, umax) == umax);\n+static_assert(saturating_add(0u, umax) == umax);\n+static_assert(saturating_add(umax, 0u) == umax);\n+static_assert(saturating_add(0u, 1u) == 1u);\n+static_assert(saturating_add(1u, 0u) == 1u);\n \n // Wider unsigned type than the args\n-static_assert(add_sat<unsigned long long>(umax, umax) == (long long)umax * 2);\n+static_assert(saturating_add<unsigned long long>(umax, umax) == (long long)umax * 2);\n \n // Unsigned type that undergoes integer promotion\n constexpr auto ushrt_max = std::numeric_limits<unsigned short>::max();\n-static_assert(add_sat<unsigned short>(0, 0) == 0);\n-static_assert(add_sat<unsigned short>(1, 1) == 2);\n-static_assert(add_sat<unsigned short>(ushrt_max, ushrt_max) == ushrt_max);\n-static_assert(add_sat<unsigned short>(ushrt_max, 1) == ushrt_max);\n-static_assert(add_sat<unsigned short>(1, ushrt_max) == ushrt_max);\n+static_assert(saturating_add<unsigned short>(0, 0) == 0);\n+static_assert(saturating_add<unsigned short>(1, 1) == 2);\n+static_assert(saturating_add<unsigned short>(ushrt_max, ushrt_max) == ushrt_max);\n+static_assert(saturating_add<unsigned short>(ushrt_max, 1) == ushrt_max);\n+static_assert(saturating_add<unsigned short>(1, ushrt_max) == ushrt_max);\ndiff --git a/libstdc++-v3/testsuite/26_numerics/saturation/cast.cc b/libstdc++-v3/testsuite/26_numerics/saturation/cast.cc\nindex 672e9c46be1c..e23d727bdb68 100644\n--- a/libstdc++-v3/testsuite/26_numerics/saturation/cast.cc\n+++ b/libstdc++-v3/testsuite/26_numerics/saturation/cast.cc\n@@ -6,19 +6,19 @@\n #include <climits>\n \n #if CHAR_BIT == 8\n-static_assert(std::saturate_cast<unsigned char>(999) == 255);\n-static_assert(std::saturate_cast<signed char>(999) == 127);\n+static_assert(std::saturating_cast<unsigned char>(999) == 255);\n+static_assert(std::saturating_cast<signed char>(999) == 127);\n #endif\n-static_assert(std::saturate_cast<unsigned short>(999) == 999);\n-static_assert(std::saturate_cast<signed short>(999) == 999);\n-static_assert(std::saturate_cast<short>(INT_MAX) == SHRT_MAX);\n-static_assert(std::saturate_cast<short>(UINT_MAX) == SHRT_MAX);\n-static_assert(std::saturate_cast<short>(UINT_MAX) == SHRT_MAX);\n-static_assert(std::saturate_cast<unsigned short>(UINT_MAX) == USHRT_MAX);\n-static_assert(std::saturate_cast<int>(UINT_MAX) == INT_MAX);\n-static_assert(std::saturate_cast<int>(INT_MAX) == INT_MAX);\n-static_assert(std::saturate_cast<unsigned>(-1) == 0);\n-static_assert(std::saturate_cast<unsigned>(INT_MIN) == 0);\n-static_assert(std::saturate_cast<unsigned>(UINT_MAX) == UINT_MAX);\n-static_assert(std::saturate_cast<unsigned>(LLONG_MAX) == UINT_MAX);\n-static_assert(std::saturate_cast<unsigned>(ULLONG_MAX) == UINT_MAX);\n+static_assert(std::saturating_cast<unsigned short>(999) == 999);\n+static_assert(std::saturating_cast<signed short>(999) == 999);\n+static_assert(std::saturating_cast<short>(INT_MAX) == SHRT_MAX);\n+static_assert(std::saturating_cast<short>(UINT_MAX) == SHRT_MAX);\n+static_assert(std::saturating_cast<short>(UINT_MAX) == SHRT_MAX);\n+static_assert(std::saturating_cast<unsigned short>(UINT_MAX) == USHRT_MAX);\n+static_assert(std::saturating_cast<int>(UINT_MAX) == INT_MAX);\n+static_assert(std::saturating_cast<int>(INT_MAX) == INT_MAX);\n+static_assert(std::saturating_cast<unsigned>(-1) == 0);\n+static_assert(std::saturating_cast<unsigned>(INT_MIN) == 0);\n+static_assert(std::saturating_cast<unsigned>(UINT_MAX) == UINT_MAX);\n+static_assert(std::saturating_cast<unsigned>(LLONG_MAX) == UINT_MAX);\n+static_assert(std::saturating_cast<unsigned>(ULLONG_MAX) == UINT_MAX);\ndiff --git a/libstdc++-v3/testsuite/26_numerics/saturation/div.cc b/libstdc++-v3/testsuite/26_numerics/saturation/div.cc\nindex a3f43573651a..71d4970d632d 100644\n--- a/libstdc++-v3/testsuite/26_numerics/saturation/div.cc\n+++ b/libstdc++-v3/testsuite/26_numerics/saturation/div.cc\n@@ -7,32 +7,32 @@\n \n template<typename T, typename U>\n concept can_div_sat\n-  = requires(T t, U u) { { std::div_sat(t, u) } -> std::same_as<T>; };\n+  = requires(T t, U u) { { std::saturating_div(t, u) } -> std::same_as<T>; };\n \n static_assert( can_div_sat<int, int> );\n static_assert( not can_div_sat<int, short> );\n static_assert( not can_div_sat<unsigned, int> );\n-static_assert( noexcept(std::div_sat(0, 1)) );\n+static_assert( noexcept(std::saturating_div(0, 1)) );\n \n-using std::div_sat;\n+using std::saturating_div;\n \n-static_assert(std::div_sat(0, 1) == 0);\n-static_assert(std::div_sat(0, -1) == 0);\n-static_assert(std::div_sat(1, -1) == -1);\n-static_assert(std::div_sat(10, -2) == -5);\n-static_assert(std::div_sat(-10, -2) == 5);\n-static_assert(std::div_sat(INT_MAX, 1) == INT_MAX);\n-static_assert(std::div_sat(INT_MIN, 1) == INT_MIN);\n-static_assert(std::div_sat(INT_MIN + 1, -1) == INT_MAX);\n-static_assert(std::div_sat(0u, 1u) == 0u);\n-static_assert(std::div_sat(UINT_MAX, 1u) == UINT_MAX);\n-static_assert(std::div_sat(INT_MIN, -1) == INT_MAX);\n-static_assert(std::div_sat((short)SHRT_MIN, (short)-1) == SHRT_MAX);\n-static_assert(std::div_sat(LONG_MIN, -1L) == LONG_MAX);\n-static_assert(std::div_sat(LLONG_MIN, -1LL) == LLONG_MAX);\n+static_assert(std::saturating_div(0, 1) == 0);\n+static_assert(std::saturating_div(0, -1) == 0);\n+static_assert(std::saturating_div(1, -1) == -1);\n+static_assert(std::saturating_div(10, -2) == -5);\n+static_assert(std::saturating_div(-10, -2) == 5);\n+static_assert(std::saturating_div(INT_MAX, 1) == INT_MAX);\n+static_assert(std::saturating_div(INT_MIN, 1) == INT_MIN);\n+static_assert(std::saturating_div(INT_MIN + 1, -1) == INT_MAX);\n+static_assert(std::saturating_div(0u, 1u) == 0u);\n+static_assert(std::saturating_div(UINT_MAX, 1u) == UINT_MAX);\n+static_assert(std::saturating_div(INT_MIN, -1) == INT_MAX);\n+static_assert(std::saturating_div((short)SHRT_MIN, (short)-1) == SHRT_MAX);\n+static_assert(std::saturating_div(LONG_MIN, -1L) == LONG_MAX);\n+static_assert(std::saturating_div(LLONG_MIN, -1LL) == LLONG_MAX);\n \n template<auto N>\n-std::integral_constant<decltype(N), std::div_sat(N, N-N)>\n+std::integral_constant<decltype(N), std::saturating_div(N, N-N)>\n div_sat_by_zero();\n \n template<auto N>\ndiff --git a/libstdc++-v3/testsuite/26_numerics/saturation/extended.cc b/libstdc++-v3/testsuite/26_numerics/saturation/extended.cc\nindex fbef62826c23..8095a32d01f2 100644\n--- a/libstdc++-v3/testsuite/26_numerics/saturation/extended.cc\n+++ b/libstdc++-v3/testsuite/26_numerics/saturation/extended.cc\n@@ -14,22 +14,22 @@ test()\n   constexpr S smin = std::numeric_limits<S>::min();\n   constexpr U umax = std::numeric_limits<U>::max();\n \n-  static_assert( std::add_sat(smax, (S)1) == smax );\n-  static_assert( std::add_sat(smin, (S)-2) == smin );\n-  static_assert( std::add_sat(umax, (U)3) == umax );\n+  static_assert( std::saturating_add(smax, (S)1) == smax );\n+  static_assert( std::saturating_add(smin, (S)-2) == smin );\n+  static_assert( std::saturating_add(umax, (U)3) == umax );\n \n-  static_assert( std::sub_sat(smax, (S)-1) == smax );\n-  static_assert( std::sub_sat(smin, (S)2) == smin );\n-  static_assert( std::sub_sat((U)0, (U)3) == (U)0 );\n+  static_assert( std::saturating_sub(smax, (S)-1) == smax );\n+  static_assert( std::saturating_sub(smin, (S)2) == smin );\n+  static_assert( std::saturating_sub((U)0, (U)3) == (U)0 );\n \n-  static_assert( std::mul_sat((S)(smax >> 1), (S)3) == smax );\n-  static_assert( std::mul_sat((S)(smin >> 1), (S)5) == smin );\n-  static_assert( std::mul_sat((U)(umax >> 1), (U)7) == umax );\n+  static_assert( std::saturating_mul((S)(smax >> 1), (S)3) == smax );\n+  static_assert( std::saturating_mul((S)(smin >> 1), (S)5) == smin );\n+  static_assert( std::saturating_mul((U)(umax >> 1), (U)7) == umax );\n \n-  static_assert( std::div_sat(smax, (S)2) == (smax >> 1) );\n-  static_assert( std::div_sat(smin, (S)4) == (smin >> 2) );\n-  static_assert( std::div_sat(smin, (S)-1) == smax );\n-  static_assert( std::div_sat(umax, (U)8) == (umax >> 3) );\n+  static_assert( std::saturating_div(smax, (S)2) == (smax >> 1) );\n+  static_assert( std::saturating_div(smin, (S)4) == (smin >> 2) );\n+  static_assert( std::saturating_div(smin, (S)-1) == smax );\n+  static_assert( std::saturating_div(umax, (U)8) == (umax >> 3) );\n \n   return true;\n }\ndiff --git a/libstdc++-v3/testsuite/26_numerics/saturation/mul.cc b/libstdc++-v3/testsuite/26_numerics/saturation/mul.cc\nindex 1b5538c9af3b..ea8ca2e76522 100644\n--- a/libstdc++-v3/testsuite/26_numerics/saturation/mul.cc\n+++ b/libstdc++-v3/testsuite/26_numerics/saturation/mul.cc\n@@ -7,28 +7,28 @@\n \n template<typename T, typename U>\n concept can_mul_sat\n-  = requires(T t, U u) { { std::mul_sat(t, u) } -> std::same_as<T>; };\n+  = requires(T t, U u) { { std::saturating_mul(t, u) } -> std::same_as<T>; };\n \n static_assert( can_mul_sat<int, int> );\n static_assert( not can_mul_sat<int, short> );\n static_assert( not can_mul_sat<unsigned, int> );\n-static_assert( noexcept(std::mul_sat(0, 0)) );\n+static_assert( noexcept(std::saturating_mul(0, 0)) );\n \n-using std::mul_sat;\n+using std::saturating_mul;\n \n-static_assert(mul_sat(1, 1) == 1);\n-static_assert(mul_sat(10, 11) == 110);\n-static_assert(mul_sat(INT_MAX / 2, 3) == INT_MAX);\n-static_assert(mul_sat(INT_MAX / 2, -3) == INT_MIN);\n-static_assert(mul_sat(INT_MAX / -2, 3) == INT_MIN);\n-static_assert(mul_sat(INT_MIN / 2, -3) == INT_MAX);\n-static_assert(mul_sat(INT_MIN, -1) == INT_MAX);\n-static_assert(mul_sat(INT_MAX, -1) == INT_MIN + 1);\n-static_assert(mul_sat(INT_MAX, INT_MAX) == INT_MAX);\n-static_assert(mul_sat(INT_MAX, -INT_MAX) == INT_MIN);\n-static_assert(mul_sat(UINT_MAX, UINT_MAX) == UINT_MAX);\n-static_assert(mul_sat(UINT_MAX, 0u) == 0);\n-static_assert(mul_sat(0u, UINT_MAX) == 0);\n-static_assert(mul_sat((short)SHRT_MAX, (short)2) == SHRT_MAX);\n-static_assert(mul_sat((short)SHRT_MAX, (short)SHRT_MIN) == SHRT_MIN);\n-static_assert(mul_sat<long long>(SHRT_MAX, 2) == 2L * SHRT_MAX);\n+static_assert(saturating_mul(1, 1) == 1);\n+static_assert(saturating_mul(10, 11) == 110);\n+static_assert(saturating_mul(INT_MAX / 2, 3) == INT_MAX);\n+static_assert(saturating_mul(INT_MAX / 2, -3) == INT_MIN);\n+static_assert(saturating_mul(INT_MAX / -2, 3) == INT_MIN);\n+static_assert(saturating_mul(INT_MIN / 2, -3) == INT_MAX);\n+static_assert(saturating_mul(INT_MIN, -1) == INT_MAX);\n+static_assert(saturating_mul(INT_MAX, -1) == INT_MIN + 1);\n+static_assert(saturating_mul(INT_MAX, INT_MAX) == INT_MAX);\n+static_assert(saturating_mul(INT_MAX, -INT_MAX) == INT_MIN);\n+static_assert(saturating_mul(UINT_MAX, UINT_MAX) == UINT_MAX);\n+static_assert(saturating_mul(UINT_MAX, 0u) == 0);\n+static_assert(saturating_mul(0u, UINT_MAX) == 0);\n+static_assert(saturating_mul((short)SHRT_MAX, (short)2) == SHRT_MAX);\n+static_assert(saturating_mul((short)SHRT_MAX, (short)SHRT_MIN) == SHRT_MIN);\n+static_assert(saturating_mul<long long>(SHRT_MAX, 2) == 2L * SHRT_MAX);\ndiff --git a/libstdc++-v3/testsuite/26_numerics/saturation/sub.cc b/libstdc++-v3/testsuite/26_numerics/saturation/sub.cc\nindex c56154a49ff5..8b2eabc280af 100644\n--- a/libstdc++-v3/testsuite/26_numerics/saturation/sub.cc\n+++ b/libstdc++-v3/testsuite/26_numerics/saturation/sub.cc\n@@ -7,80 +7,80 @@\n \n template<typename T, typename U>\n concept can_sub_sat\n-  = requires(T t, U u) { { std::sub_sat(t, u) } -> std::same_as<T>; };\n+  = requires(T t, U u) { { std::saturating_sub(t, u) } -> std::same_as<T>; };\n \n static_assert( can_sub_sat<int, int> );\n static_assert( not can_sub_sat<int, short> );\n static_assert( not can_sub_sat<unsigned, int> );\n-static_assert( noexcept(std::sub_sat(0, 0)) );\n+static_assert( noexcept(std::saturating_sub(0, 0)) );\n \n-using std::sub_sat;\n+using std::saturating_sub;\n \n // Signed type\n-static_assert(sub_sat(0, 0) == 0);\n-static_assert(sub_sat(1, 1) == 0);\n-static_assert(sub_sat(-1, -1) == 0);\n-static_assert(sub_sat(-1, 1) == -2);\n+static_assert(saturating_sub(0, 0) == 0);\n+static_assert(saturating_sub(1, 1) == 0);\n+static_assert(saturating_sub(-1, -1) == 0);\n+static_assert(saturating_sub(-1, 1) == -2);\n constexpr auto max = std::numeric_limits<int>::max();\n constexpr auto min = std::numeric_limits<int>::min();\n-static_assert(sub_sat(max, 1) == max - 1);\n-static_assert(sub_sat(1, max) == 1 - max);\n-static_assert(sub_sat(max, max) == 0);\n-static_assert(sub_sat(min, 1) == min);\n-static_assert(sub_sat(min, 123) == min);\n-static_assert(sub_sat(0, max) == min + 1);\n-static_assert(sub_sat(-1, max) == min);\n-static_assert(sub_sat(-2, max) == min);\n-static_assert(sub_sat(-2, min) == max - 1);\n-static_assert(sub_sat(-1, min) == max);\n-static_assert(sub_sat(0, min) == max);\n-static_assert(sub_sat(1, min) == max);\n-static_assert(sub_sat(min, -1) == min + 1);\n-static_assert(sub_sat(min, min) == 0);\n-static_assert(sub_sat(max, min) == max);\n-static_assert(sub_sat(min, max) == min);\n+static_assert(saturating_sub(max, 1) == max - 1);\n+static_assert(saturating_sub(1, max) == 1 - max);\n+static_assert(saturating_sub(max, max) == 0);\n+static_assert(saturating_sub(min, 1) == min);\n+static_assert(saturating_sub(min, 123) == min);\n+static_assert(saturating_sub(0, max) == min + 1);\n+static_assert(saturating_sub(-1, max) == min);\n+static_assert(saturating_sub(-2, max) == min);\n+static_assert(saturating_sub(-2, min) == max - 1);\n+static_assert(saturating_sub(-1, min) == max);\n+static_assert(saturating_sub(0, min) == max);\n+static_assert(saturating_sub(1, min) == max);\n+static_assert(saturating_sub(min, -1) == min + 1);\n+static_assert(saturating_sub(min, min) == 0);\n+static_assert(saturating_sub(max, min) == max);\n+static_assert(saturating_sub(min, max) == min);\n \n // Wider signed type than the args\n-static_assert(sub_sat<long long>(max, min) == (long long)max * 2 + 1);\n-static_assert(sub_sat<long long>(min, max) == (long long)min * 2 + 1);\n+static_assert(saturating_sub<long long>(max, min) == (long long)max * 2 + 1);\n+static_assert(saturating_sub<long long>(min, max) == (long long)min * 2 + 1);\n \n // Signed type that undergoes integer promotion\n constexpr auto shrt_max = std::numeric_limits<short>::max();\n constexpr auto shrt_min = std::numeric_limits<short>::min();\n-static_assert(sub_sat<short>(0, 0) == 0);\n-static_assert(sub_sat<short>(1, 1) == 0);\n-static_assert(sub_sat<short>(3, 1) == 2);\n-static_assert(sub_sat<short>(shrt_max, shrt_max) == 0);\n-static_assert(sub_sat<short>(shrt_max, 1) == shrt_max - 1);\n-static_assert(sub_sat<short>(1, shrt_max) == shrt_min + 2);\n-static_assert(sub_sat<short>(shrt_max, shrt_min) == shrt_max);\n-static_assert(sub_sat<short>(0, shrt_min) == shrt_max);\n-static_assert(sub_sat<short>(shrt_min, (short)1) == shrt_min);\n-static_assert(sub_sat<short>(shrt_min, (short)-1) == shrt_min + 1);\n-static_assert(sub_sat<short>((short)-1, shrt_min) == shrt_max);\n-static_assert(sub_sat<short>((short)1, shrt_min) == shrt_max);\n+static_assert(saturating_sub<short>(0, 0) == 0);\n+static_assert(saturating_sub<short>(1, 1) == 0);\n+static_assert(saturating_sub<short>(3, 1) == 2);\n+static_assert(saturating_sub<short>(shrt_max, shrt_max) == 0);\n+static_assert(saturating_sub<short>(shrt_max, 1) == shrt_max - 1);\n+static_assert(saturating_sub<short>(1, shrt_max) == shrt_min + 2);\n+static_assert(saturating_sub<short>(shrt_max, shrt_min) == shrt_max);\n+static_assert(saturating_sub<short>(0, shrt_min) == shrt_max);\n+static_assert(saturating_sub<short>(shrt_min, (short)1) == shrt_min);\n+static_assert(saturating_sub<short>(shrt_min, (short)-1) == shrt_min + 1);\n+static_assert(saturating_sub<short>((short)-1, shrt_min) == shrt_max);\n+static_assert(saturating_sub<short>((short)1, shrt_min) == shrt_max);\n \n // Unsigned type\n-static_assert(sub_sat(0u, 0u) == 0u);\n-static_assert(sub_sat(1u, 1u) == 0u);\n-static_assert(sub_sat(-1u, -1u) == 0u);\n-static_assert(sub_sat(-1u, 1u) == -2u);\n+static_assert(saturating_sub(0u, 0u) == 0u);\n+static_assert(saturating_sub(1u, 1u) == 0u);\n+static_assert(saturating_sub(-1u, -1u) == 0u);\n+static_assert(saturating_sub(-1u, 1u) == -2u);\n constexpr auto umax = std::numeric_limits<unsigned>::max();\n-static_assert(sub_sat(0u, 1u) == 0u);\n-static_assert(sub_sat(umax, umax) == 0u);\n-static_assert(sub_sat(umax, 0u) == umax);\n-static_assert(sub_sat(0u, umax) == 0u);\n-static_assert(sub_sat(umax, 1u) == umax - 1u);\n-static_assert(sub_sat(0u, 0u) == 0u);\n+static_assert(saturating_sub(0u, 1u) == 0u);\n+static_assert(saturating_sub(umax, umax) == 0u);\n+static_assert(saturating_sub(umax, 0u) == umax);\n+static_assert(saturating_sub(0u, umax) == 0u);\n+static_assert(saturating_sub(umax, 1u) == umax - 1u);\n+static_assert(saturating_sub(0u, 0u) == 0u);\n \n // Wider unsigned type than the args\n-static_assert(sub_sat<unsigned long long>(0u, umax) == 0u);\n+static_assert(saturating_sub<unsigned long long>(0u, umax) == 0u);\n \n // Unsigned type that undergoes integer promotion\n constexpr auto ushrt_max = std::numeric_limits<unsigned short>::max();\n-static_assert(sub_sat<unsigned short>(0, 0) == 0);\n-static_assert(sub_sat<unsigned short>(1, 1) == 0);\n-static_assert(sub_sat<unsigned short>(3, 1) == 2);\n-static_assert(sub_sat<unsigned short>(ushrt_max, ushrt_max) == 0);\n-static_assert(sub_sat<unsigned short>(0, 1) == 0);\n-static_assert(sub_sat<unsigned short>(1, ushrt_max) == 0);\n+static_assert(saturating_sub<unsigned short>(0, 0) == 0);\n+static_assert(saturating_sub<unsigned short>(1, 1) == 0);\n+static_assert(saturating_sub<unsigned short>(3, 1) == 2);\n+static_assert(saturating_sub<unsigned short>(ushrt_max, ushrt_max) == 0);\n+static_assert(saturating_sub<unsigned short>(0, 1) == 0);\n+static_assert(saturating_sub<unsigned short>(1, ushrt_max) == 0);\ndiff --git a/libstdc++-v3/testsuite/26_numerics/saturation/version.cc b/libstdc++-v3/testsuite/26_numerics/saturation/version.cc\nindex ca94ef1212a2..7b08820b5984 100644\n--- a/libstdc++-v3/testsuite/26_numerics/saturation/version.cc\n+++ b/libstdc++-v3/testsuite/26_numerics/saturation/version.cc\n@@ -5,7 +5,7 @@\n \n #ifndef __cpp_lib_saturation_arithmetic\n # error \"Feature test macro for saturation arithmetic is missing in <numeric>\"\n-#elif __cpp_lib_saturation_arithmetic < 202311L\n+#elif __cpp_lib_saturation_arithmetic < 202603L\n # error \"Feature test macro for saturation arithmetic has wrong value in <numeric>\"\n #endif\n \n@@ -14,6 +14,6 @@\n \n #ifndef __cpp_lib_saturation_arithmetic\n # error \"Feature test macro for saturation arithmetic is missing in <version>\"\n-#elif __cpp_lib_saturation_arithmetic < 202311L\n+#elif __cpp_lib_saturation_arithmetic < 202603L\n # error \"Feature test macro for saturation arithmetic has wrong value in <version>\"\n #endif\n",
    "prefixes": []
}