get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 2226870,
    "url": "http://patchwork.ozlabs.org/api/patches/2226870/?format=api",
    "web_url": "http://patchwork.ozlabs.org/project/gcc/patch/bmm.hhupeonce6.gcc.gcc-TEST.fdumont.119.1.1@forge-stage.sourceware.org/",
    "project": {
        "id": 17,
        "url": "http://patchwork.ozlabs.org/api/projects/17/?format=api",
        "name": "GNU Compiler Collection",
        "link_name": "gcc",
        "list_id": "gcc-patches.gcc.gnu.org",
        "list_email": "gcc-patches@gcc.gnu.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null,
        "list_archive_url": "",
        "list_archive_url_format": "",
        "commit_url_format": ""
    },
    "msgid": "<bmm.hhupeonce6.gcc.gcc-TEST.fdumont.119.1.1@forge-stage.sourceware.org>",
    "list_archive_url": null,
    "date": "2026-04-22T18:59:22",
    "name": "[v1,1/1] libstdc++: [_GLIBCXX_DEBUG] Implement std::__debug::inplace_vector",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "c3f9354d905e17e059f8648f748048e035e3ab66",
    "submitter": {
        "id": 93220,
        "url": "http://patchwork.ozlabs.org/api/people/93220/?format=api",
        "name": "François Dumont via Sourceware Forge",
        "email": "forge-bot+fdumont@forge-stage.sourceware.org"
    },
    "delegate": null,
    "mbox": "http://patchwork.ozlabs.org/project/gcc/patch/bmm.hhupeonce6.gcc.gcc-TEST.fdumont.119.1.1@forge-stage.sourceware.org/mbox/",
    "series": [
        {
            "id": 501106,
            "url": "http://patchwork.ozlabs.org/api/series/501106/?format=api",
            "web_url": "http://patchwork.ozlabs.org/project/gcc/list/?series=501106",
            "date": "2026-04-22T18:59:22",
            "name": "libstdc++: [_GLIBCXX_DEBUG] Implement std::__debug::inplace_vector",
            "version": 1,
            "mbox": "http://patchwork.ozlabs.org/series/501106/mbox/"
        }
    ],
    "comments": "http://patchwork.ozlabs.org/api/patches/2226870/comments/",
    "check": "pending",
    "checks": "http://patchwork.ozlabs.org/api/patches/2226870/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Delivered-To": [
            "patchwork-incoming@legolas.ozlabs.org",
            "gcc-patches@gcc.gnu.org"
        ],
        "Authentication-Results": [
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=2620:52:6:3111::32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)",
            "sourceware.org; dmarc=none (p=none dis=none)\n header.from=forge-stage.sourceware.org",
            "sourceware.org;\n spf=pass smtp.mailfrom=forge-stage.sourceware.org",
            "server2.sourceware.org;\n arc=none smtp.remote-ip=38.145.34.39"
        ],
        "Received": [
            "from vm01.sourceware.org (vm01.sourceware.org\n [IPv6:2620:52:6:3111::32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g1BKw4qSQz1yD5\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 23 Apr 2026 06:54:28 +1000 (AEST)",
            "from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id CDCBB516CB42\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 20:36:46 +0000 (GMT)",
            "from forge-stage.sourceware.org (vm08.sourceware.org [38.145.34.39])\n by sourceware.org (Postfix) with ESMTPS id 8EC4C42930BD\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 19:00:17 +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 6ADDB435D4\n for <gcc-patches@gcc.gnu.org>; Wed, 22 Apr 2026 19:00:17 +0000 (UTC)"
        ],
        "DKIM-Filter": [
            "OpenDKIM Filter v2.11.0 sourceware.org CDCBB516CB42",
            "OpenDKIM Filter v2.11.0 sourceware.org 8EC4C42930BD"
        ],
        "DMARC-Filter": "OpenDMARC Filter v1.4.2 sourceware.org 8EC4C42930BD",
        "ARC-Filter": "OpenARC Filter v1.0.0 sourceware.org 8EC4C42930BD",
        "ARC-Seal": "i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1776884417; cv=none;\n b=bqVIydJ5KmC+s9Co+nYtu0poBb3aBzDidYT9/ywCXDy2cyD7PbuiD9SaGtjoc22zdPNs5L6hmVKVpXFbXVEoTLz2pcrdwIHO/0pEvUQQlv0rpThUZAGb2XHtA5wXZjnRkAQMHPC8+DbztXKKMUnwuIiINsVchb92HQ3LSUEi7rs=",
        "ARC-Message-Signature": "i=1; a=rsa-sha256; d=sourceware.org; s=key;\n t=1776884417; c=relaxed/simple;\n bh=zQ4YvTBSG8Znz3bXAR8MZova/uju313gnQ9cvbdFCLQ=;\n h=From:Date:Subject:MIME-Version:To:Message-ID;\n b=SuZ4Yebr9bxLyMGfQcMtOv2yWp4dH1dXlLvx6g5VwUEU9sqYRdNrYBNNORTo6Dis3kgExRy9yTc0KFSnl6FiS09FM1RWcuyflv/r+TBsaZ6JaO5vn30NkOdSg7NkPsc48bl4OMW66DxMV+uTEP+V4+K8APK5vaTC5Qq6EjbqerA=",
        "ARC-Authentication-Results": "i=1; server2.sourceware.org",
        "From": "=?utf-8?q?Fran=C3=A7ois_Dumont_via_Sourceware_Forge?=\n <forge-bot+fdumont@forge-stage.sourceware.org>",
        "Date": "Wed, 22 Apr 2026 18:59:22 +0000",
        "Subject": "[PATCH v1 1/1] libstdc++: [_GLIBCXX_DEBUG] Implement\n std::__debug::inplace_vector",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "To": "gcc-patches mailing list <gcc-patches@gcc.gnu.org>",
        "Message-ID": "\n <bmm.hhupeonce6.gcc.gcc-TEST.fdumont.119.1.1@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/119",
        "References": "\n <bmm.hhupeonce6.gcc.gcc-TEST.fdumont.119.1.0@forge-stage.sourceware.org>",
        "In-Reply-To": "\n <bmm.hhupeonce6.gcc.gcc-TEST.fdumont.119.1.0@forge-stage.sourceware.org>",
        "X-Patch-URL": "\n https://forge.sourceware.org/fdumont/gcc-TEST/commit/b41b3c88a88490ba191f88e982dbb77350dbece3",
        "X-BeenThere": "gcc-patches@gcc.gnu.org",
        "X-Mailman-Version": "2.1.30",
        "Precedence": "list",
        "List-Id": "Gcc-patches mailing list <gcc-patches.gcc.gnu.org>",
        "List-Unsubscribe": "<https://gcc.gnu.org/mailman/options/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=unsubscribe>",
        "List-Archive": "<https://gcc.gnu.org/pipermail/gcc-patches/>",
        "List-Post": "<mailto:gcc-patches@gcc.gnu.org>",
        "List-Help": "<mailto:gcc-patches-request@gcc.gnu.org?subject=help>",
        "List-Subscribe": "<https://gcc.gnu.org/mailman/listinfo/gcc-patches>,\n <mailto:gcc-patches-request@gcc.gnu.org?subject=subscribe>",
        "Reply-To": "gcc-patches mailing list <gcc-patches@gcc.gnu.org>,\n fdumont@gcc.gnu.org",
        "Errors-To": "gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org"
    },
    "content": "From: François Dumont <frs.dumont@gmail.com>\n\nAdd _GLIBCXX_DEBUG std::inplace_vector implementation.\n\nlibstdc++-v3/ChangeLog:\n\n\t* include/Makefile.am (debug_headers): Add inplace_vector.\n\t* include/Makefile.in: Regenerate.\n\t* include/debug/functions.h (__check_valid_range): Add C++20 constexpr.\n\t* include/debug/helper_functions.h (__valid_range): Likewise.\n\t* include/debug/inplace_vector: New.\n\t* include/debug/safe_base.h (~_Safe_sequence_base()): Add C++11 noexcept.\n\t(_Safe_sequence_base::operator=(const _Safe_sequence_base&)): New.\n\t(_Safe_sequence_base::operator=(_Safe_sequence_base&&)): New.\n\t(_Safe_sequence_base::_M_invalidate_all): Add C++20 constexpr.\n\t* include/debug/safe_container.h\n\t(_Safe_container<>::operator=(const _Safe_container<>&)): Implement using\n\t_Safe_sequence_base same operator.\n\t* include/debug/safe_iterator.h (__valid_range): Add C++20 constexpr.\n\t* include/debug/safe_sequence.h\n\t(_Not_equal_to(const _Type&)): Add C++20 constexpr.\n\t(_Equal_to(const _Type&)): Add C++20 constexpr.\n\t(_After_nth_from(const difference_type&, const _Iterator&)): Add C++20 constexpr.\n\t(_Safe_sequence<>::_M_invalidate_if): Add C++20 constexpr.\n\t(_Safe_node_sequence::operator=(const _Safe_node_sequence&)): New.\n\t(_Safe_node_sequence::operator=(_Safe_node_sequence&&)): New.\n\t(_Safe_node_sequence<>::_M_invalidate_all()): Add C++20 constexpr.\n\t* include/debug/safe_sequence.tcc\n\t(_Safe_sequence<>::_M_invalidate_if): Add C++20 constexpr.\n\t* include/debug/safe_container.h\n\t(_Safe_container::operator=(const _Safe_container&)): Implement using same\n\t_Safe_sequence_base operator.\n\t* include/std/inplace_vector [_GLIBCXX_DEBUG](std::inplace_vector<>): Move\n\timplementation into __cxx1998 namespace.\n\t(erase, erase_if): Limit to non-debug inplace_vector<>, cleanup code.\n\t[_GLIBCXX_DEBUG]: Add include <debug/inplace_vector>.\n\t* testsuite/23_containers/inplace_vector/cons/1.cc: Adapt, skip several\n\tis_trivially_xxx checks when in _GLIBCXX_DEBUG mode.\n\t* testsuite/23_containers/inplace_vector/copy.cc: Likewise.\n\t* testsuite/23_containers/inplace_vector/move.cc: Likewise.\n\t* testsuite/23_containers/inplace_vector/debug/assign1_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/assign2_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/assign3_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/assign4_backtrace_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/assign4_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/construct1_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/construct2_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/construct3_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/construct4_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/debug_functions.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/erase.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/insert1_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/insert2_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/insert3_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/insert4_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/insert5_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/insert7_neg.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/1.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/2.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/3.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/4.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/append_range.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/erase.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/pop_back.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/push_back.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/swap.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/try_append_range.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/try_emplace_back.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/try_push_back.cc: New test case.\n\t* testsuite/23_containers/inplace_vector/debug/invalidation/unchecked_emplace_back.cc: New test case.\n\t* testsuite/util/debug/checks.h: Avoid using _GLIBCXX_DEBUG containers in test\n\timplementations.\n---\n libstdc++-v3/include/Makefile.am              |   1 +\n libstdc++-v3/include/Makefile.in              |   1 +\n libstdc++-v3/include/debug/functions.h        |  10 +-\n libstdc++-v3/include/debug/helper_functions.h |   4 +-\n libstdc++-v3/include/debug/inplace_vector     | 691 ++++++++++++++++++\n libstdc++-v3/include/debug/safe_base.h        |  22 +-\n libstdc++-v3/include/debug/safe_container.h   |  21 +-\n libstdc++-v3/include/debug/safe_iterator.h    |  12 +-\n libstdc++-v3/include/debug/safe_sequence.h    |  28 +-\n libstdc++-v3/include/debug/safe_sequence.tcc  |   5 +-\n libstdc++-v3/include/std/inplace_vector       |  35 +-\n .../23_containers/inplace_vector/cons/1.cc    |   4 +-\n .../23_containers/inplace_vector/copy.cc      |   4 +\n .../inplace_vector/debug/assign1_neg.cc       |  16 +\n .../inplace_vector/debug/assign2_neg.cc       |  16 +\n .../inplace_vector/debug/assign3_neg.cc       |  16 +\n .../debug/assign4_backtrace_neg.cc            |  17 +\n .../inplace_vector/debug/assign4_neg.cc       |  15 +\n .../inplace_vector/debug/construct1_neg.cc    |  16 +\n .../inplace_vector/debug/construct2_neg.cc    |  16 +\n .../inplace_vector/debug/construct3_neg.cc    |  16 +\n .../inplace_vector/debug/construct4_neg.cc    |  15 +\n .../inplace_vector/debug/debug_functions.cc   |  34 +\n .../inplace_vector/debug/erase.cc             |  35 +\n .../inplace_vector/debug/insert1_neg.cc       |  16 +\n .../inplace_vector/debug/insert2_neg.cc       |  16 +\n .../inplace_vector/debug/insert3_neg.cc       |  16 +\n .../inplace_vector/debug/insert4_neg.cc       |  15 +\n .../inplace_vector/debug/insert5_neg.cc       |  16 +\n .../inplace_vector/debug/insert7_neg.cc       |  24 +\n .../inplace_vector/debug/invalidation/1.cc    |  33 +\n .../inplace_vector/debug/invalidation/2.cc    |  34 +\n .../inplace_vector/debug/invalidation/3.cc    |  43 ++\n .../inplace_vector/debug/invalidation/4.cc    |  40 +\n .../debug/invalidation/append_range.cc        |  45 ++\n .../debug/invalidation/erase.cc               |  36 +\n .../debug/invalidation/pop_back.cc            |  27 +\n .../debug/invalidation/push_back.cc           |  53 ++\n .../inplace_vector/debug/invalidation/swap.cc |  53 ++\n .../debug/invalidation/try_append_range.cc    |  45 ++\n .../debug/invalidation/try_emplace_back.cc    |  27 +\n .../debug/invalidation/try_push_back.cc       |  45 ++\n .../invalidation/unchecked_emplace_back.cc    |  27 +\n .../23_containers/inplace_vector/move.cc      |   4 +\n libstdc++-v3/testsuite/util/debug/checks.h    |  37 +-\n 45 files changed, 1660 insertions(+), 42 deletions(-)\n create mode 100644 libstdc++-v3/include/debug/inplace_vector\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign1_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign2_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign3_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign4_backtrace_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign4_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct1_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct2_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct3_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct4_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/debug_functions.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/erase.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert1_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert2_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert3_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert4_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert5_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert7_neg.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/1.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/2.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/3.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/4.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/append_range.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/erase.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/pop_back.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/push_back.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/swap.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_append_range.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_emplace_back.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_push_back.cc\n create mode 100644 libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/unchecked_emplace_back.cc",
    "diff": "diff --git a/libstdc++-v3/include/Makefile.am b/libstdc++-v3/include/Makefile.am\nindex ae7a7ca9073a..7d65c6f3ab31 100644\n--- a/libstdc++-v3/include/Makefile.am\n+++ b/libstdc++-v3/include/Makefile.am\n@@ -971,6 +971,7 @@ debug_headers = \\\n \t${debug_srcdir}/forward_list \\\n \t${debug_srcdir}/functions.h \\\n \t${debug_srcdir}/helper_functions.h \\\n+\t${debug_srcdir}/inplace_vector \\\n \t${debug_srcdir}/list \\\n \t${debug_srcdir}/map \\\n \t${debug_srcdir}/macros.h \\\ndiff --git a/libstdc++-v3/include/Makefile.in b/libstdc++-v3/include/Makefile.in\nindex f07e2326816b..acf8ae9be441 100644\n--- a/libstdc++-v3/include/Makefile.in\n+++ b/libstdc++-v3/include/Makefile.in\n@@ -1308,6 +1308,7 @@ debug_freestanding = \\\n @GLIBCXX_HOSTED_TRUE@\t${debug_srcdir}/forward_list \\\n @GLIBCXX_HOSTED_TRUE@\t${debug_srcdir}/functions.h \\\n @GLIBCXX_HOSTED_TRUE@\t${debug_srcdir}/helper_functions.h \\\n+@GLIBCXX_HOSTED_TRUE@\t${debug_srcdir}/inplace_vector \\\n @GLIBCXX_HOSTED_TRUE@\t${debug_srcdir}/list \\\n @GLIBCXX_HOSTED_TRUE@\t${debug_srcdir}/map \\\n @GLIBCXX_HOSTED_TRUE@\t${debug_srcdir}/macros.h \\\ndiff --git a/libstdc++-v3/include/debug/functions.h b/libstdc++-v3/include/debug/functions.h\nindex c5f5582b0050..4e6fdae71935 100644\n--- a/libstdc++-v3/include/debug/functions.h\n+++ b/libstdc++-v3/include/debug/functions.h\n@@ -53,15 +53,19 @@ namespace __gnu_debug\n    * assertion statement because, e.g., we are in a constructor.\n   */\n   template<typename _InputIterator>\n-    inline _InputIterator\n+    _GLIBCXX20_CONSTEXPR inline _InputIterator\n     __check_valid_range(const _InputIterator& __first,\n \t\t\tconst _InputIterator& __last,\n \t\t\tconst char* __file,\n \t\t\tunsigned int __line,\n \t\t\tconst char* __function)\n     {\n-      __glibcxx_check_valid_range_at(__first, __last,\n-\t\t\t\t     __file, __line, __function);\n+      if (!std::__is_constant_evaluated())\n+\t{\n+\t  __glibcxx_check_valid_range_at(__first, __last,\n+\t\t\t\t\t __file, __line, __function);\n+\t}\n+\n       return __first;\n     }\n \ndiff --git a/libstdc++-v3/include/debug/helper_functions.h b/libstdc++-v3/include/debug/helper_functions.h\nindex 9395892b537c..b9771034bf34 100644\n--- a/libstdc++-v3/include/debug/helper_functions.h\n+++ b/libstdc++-v3/include/debug/helper_functions.h\n@@ -249,7 +249,7 @@ namespace __gnu_debug\n     }\n \n   template<typename _Iterator, typename _Sequence, typename _Category>\n-    bool\n+    _GLIBCXX20_CONSTEXPR bool\n     __valid_range(const _Safe_iterator<_Iterator, _Sequence, _Category>&,\n \t\t  const _Safe_iterator<_Iterator, _Sequence, _Category>&,\n \t\t  typename _Distance_traits<_Iterator>::__type&);\n@@ -272,7 +272,7 @@ namespace __gnu_debug\n     }\n \n   template<typename _Iterator, typename _Sequence, typename _Category>\n-    bool\n+    _GLIBCXX20_CONSTEXPR bool\n     __valid_range(const _Safe_iterator<_Iterator, _Sequence, _Category>&,\n \t\t  const _Safe_iterator<_Iterator, _Sequence, _Category>&);\n \ndiff --git a/libstdc++-v3/include/debug/inplace_vector b/libstdc++-v3/include/debug/inplace_vector\nnew file mode 100644\nindex 000000000000..c7e301efc621\n--- /dev/null\n+++ b/libstdc++-v3/include/debug/inplace_vector\n@@ -0,0 +1,691 @@\n+// Debugging inplace_vector implementation -*- C++ -*-\n+\n+// Copyright The GNU Toolchain Authors.\n+//\n+// This file is part of the GNU ISO C++ Library.  This library is free\n+// software; you can redistribute it and/or modify it under the\n+// terms of the GNU General Public License as published by the\n+// Free Software Foundation; either version 3, or (at your option)\n+// any later version.\n+\n+// This library is distributed in the hope that it will be useful,\n+// but WITHOUT ANY WARRANTY; without even the implied warranty of\n+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+// GNU General Public License for more details.\n+\n+// Under Section 7 of GPL version 3, you are granted additional\n+// permissions described in the GCC Runtime Library Exception, version\n+// 3.1, as published by the Free Software Foundation.\n+\n+// You should have received a copy of the GNU General Public License and\n+// a copy of the GCC Runtime Library Exception along with this program;\n+// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see\n+// <http://www.gnu.org/licenses/>.\n+\n+/** @file debug/inplace_vector\n+ *  This file is a GNU debug extension to the Standard C++ Library.\n+ */\n+\n+#ifndef _GLIBCXX_DEBUG_INPLACE_VECTOR\n+#define _GLIBCXX_DEBUG_INPLACE_VECTOR 1\n+\n+#ifdef _GLIBCXX_SYSHDR\n+#pragma GCC system_header\n+#endif\n+\n+#include <debug/debug.h>\n+\n+namespace std _GLIBCXX_VISIBILITY(default) { namespace __debug {\n+  template<typename _Tp, size_t _Nm> class inplace_vector;\n+} } // namespace std::__debug\n+\n+#include <inplace_vector>\n+\n+#ifdef __glibcxx_inplace_vector // C++ >= 26\n+\n+#include <debug/safe_sequence.h>\n+#include <debug/safe_iterator.h>\n+\n+namespace std _GLIBCXX_VISIBILITY(default)\n+{\n+namespace __debug\n+{\n+  /// Class std::inplace_vector with safety/checking/debug instrumentation.\n+  template<typename _Tp, size_t _Nm>\n+    class inplace_vector\n+    : public __gnu_debug::_Safe_sequence<inplace_vector<_Tp, _Nm>>\n+    , public _GLIBCXX_STD_C::inplace_vector<_Tp, _Nm>\n+    {\n+      using _Base = _GLIBCXX_STD_C::inplace_vector<_Tp, _Nm>;\n+      using _Base_iterator = typename _Base::iterator;\n+      using _Base_const_iterator = typename _Base::const_iterator;\n+      using _Equal = __gnu_debug::_Equal_to<_Base_const_iterator>;\n+\n+      template<typename _ItT, typename _SeqT, typename _CatT>\n+\tfriend class ::__gnu_debug::_Safe_iterator;\n+\n+    public:\n+      // types:\n+      using value_type = _Base::value_type;\n+      using pointer = _Base::pointer;\n+      using const_pointer = _Base::const_pointer;\n+      using reference = _Base::reference;\n+      using const_reference = _Base::const_reference;\n+      using size_type = _Base::size_type;\n+      using difference_type = _Base::difference_type;\n+      using iterator\n+\t= __gnu_debug::_Safe_iterator<_Base_iterator, inplace_vector>;\n+      using const_iterator\n+\t= __gnu_debug::_Safe_iterator<_Base_const_iterator, inplace_vector>;\n+      using reverse_iterator       = std::reverse_iterator<iterator>;\n+      using const_reverse_iterator = std::reverse_iterator<const_iterator>;\n+\n+      constexpr\n+      inplace_vector() noexcept = default;\n+\n+      constexpr explicit\n+      inplace_vector(size_type __n)\n+      : _Base(__n) { }\n+\n+      constexpr\n+      inplace_vector(size_type __n, const _Tp& __value)\n+\t: _Base(__n, __value) { }\n+\n+      template<__any_input_iterator _InputIterator>\n+\tconstexpr\n+\tinplace_vector(_InputIterator __first, _InputIterator __last)\n+\t: _Base(__gnu_debug::__base(\n+\t\t  __glibcxx_check_valid_constructor_range(__first, __last)),\n+\t\t__gnu_debug::__base(__last)) { }\n+\n+      template<__detail::__container_compatible_range<_Tp> _Rg>\n+\tconstexpr\n+\tinplace_vector(from_range_t, _Rg&& __rg)\n+\t  : _Base(from_range_t{}, std::forward<_Rg>(__rg)) { }\n+\n+      constexpr\n+      inplace_vector(initializer_list<_Tp> __il)\n+      : _Base(__il) { }\n+\n+      inplace_vector(const inplace_vector&) = default;\n+      inplace_vector(inplace_vector&&) = default;\n+      ~inplace_vector() = default;\n+\n+      inplace_vector&\n+      operator=(const inplace_vector&) = default;\n+\n+      inplace_vector&\n+      operator=(inplace_vector&&) = default;\n+\n+      constexpr inplace_vector&\n+      operator=(initializer_list<_Tp> __il)\n+      {\n+\t_Base::operator=(__il);\n+\tthis->_M_invalidate_all();\n+\treturn *this;\n+      }\n+\n+      template<__any_input_iterator _InputIterator>\n+\tconstexpr void\n+\tassign(_InputIterator __first, _InputIterator __last)\n+\t{\n+\t  typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;\n+\t  __glibcxx_check_valid_range2(__first, __last, __dist);\n+\n+\t  const auto __size = size();\n+\t  const auto __end = _Base::end();\n+\t  if (__dist.second >= __gnu_debug::__dp_sign)\n+\t    _Base::assign(__gnu_debug::__unsafe(__first),\n+\t\t\t  __gnu_debug::__unsafe(__last));\n+\t  else\n+\t    _Base::assign(__first, __last);\n+\n+\t  if (size() < __size)\n+\t    _M_invalidate_after_nth(size());\n+\t  else if (size() > __size)\n+\t    this->_M_invalidate_if(_Equal(__end));\n+\t}\n+\n+      template<__detail::__container_compatible_range<_Tp> _Rg>\n+\tconstexpr void\n+\tassign_range(_Rg&& __rg)\n+\t{\n+\t  _Base::assign_range(std::forward<_Rg>(__rg));\n+\t  this->_M_invalidate_all();\n+\t}\n+\n+      constexpr void\n+      assign(size_type __n, const _Tp& __u)\n+      {\n+\t_Base::assign(__n, __u);\n+\tthis->_M_invalidate_all();\n+      }\n+\n+      constexpr void\n+      assign(initializer_list<_Tp> __il)\n+      {\n+\t_Base::assign(__il);\n+\tthis->_M_invalidate_all();\n+      }\n+\n+      // iterators\n+      [[nodiscard]]\n+      constexpr iterator\n+      begin() noexcept\n+      { return { _Base::begin(), this }; }\n+\n+      [[nodiscard]]\n+      constexpr const_iterator\n+      begin() const noexcept\n+      { return { _Base::begin(), this }; }\n+\n+      [[nodiscard]]\n+      constexpr iterator\n+      end() noexcept\n+      { return { _Base::end(), this }; }\n+\n+      [[nodiscard]]\n+      constexpr const_iterator\n+      end() const noexcept\n+      { return { _Base::end(), this }; }\n+\n+      [[nodiscard]]\n+      constexpr reverse_iterator\n+      rbegin() noexcept\n+      { return reverse_iterator(end()); }\n+\n+      [[nodiscard]]\n+      constexpr const_reverse_iterator\n+      rbegin() const noexcept\n+      { return const_reverse_iterator(end()); }\n+\n+      [[nodiscard]]\n+      constexpr reverse_iterator\n+      rend() noexcept { return reverse_iterator(begin()); }\n+\n+      [[nodiscard]]\n+      constexpr const_reverse_iterator\n+      rend() const noexcept { return const_reverse_iterator(begin()); }\n+\n+      [[nodiscard]]\n+      constexpr const_iterator\n+      cbegin() const noexcept\n+      { return { _Base::cbegin(), this }; }\n+\n+      [[nodiscard]]\n+      constexpr const_iterator\n+      cend() const noexcept\n+      { return { _Base::cend(), this }; }\n+\n+      [[nodiscard]]\n+      constexpr const_reverse_iterator\n+      crbegin() const noexcept { return rbegin(); }\n+\n+      [[nodiscard]]\n+      constexpr const_reverse_iterator\n+      crend() const noexcept { return rend(); }\n+\n+      using _Base::empty;\n+      using _Base::size;\n+      using _Base::max_size;\n+      using _Base::capacity;\n+\n+      constexpr void\n+      resize(size_type __n)\n+      {\n+\t_Base::resize(__n);\n+\t_M_invalidate_after_nth(__n);\n+      }\n+\n+      constexpr void\n+      resize(size_type __n, const _Tp& __c)\n+      {\n+\t_Base::resize(__n, __c);\n+\t_M_invalidate_after_nth(__n);\n+      }\n+\n+      using _Base::reserve;\n+      using _Base::shrink_to_fit;\n+\n+      // element access\n+      [[nodiscard]]\n+      constexpr reference\n+      operator[](size_type __n)\n+      {\n+\t__glibcxx_check_subscript(__n);\n+\treturn _Base::operator[](__n);\n+      }\n+\n+      [[nodiscard]]\n+      constexpr const_reference\n+      operator[](size_type __n) const\n+      {\n+\t__glibcxx_check_subscript(__n);\n+\treturn _Base::operator[](__n);\n+      }\n+\n+      using _Base::at;\n+\n+      [[nodiscard]]\n+      constexpr reference\n+      front()\n+      {\n+\t__glibcxx_check_nonempty();\n+\treturn data()[0];\n+      }\n+\n+      [[nodiscard]]\n+      constexpr const_reference\n+      front() const\n+      {\n+\t__glibcxx_check_nonempty();\n+\treturn data()[0];\n+      }\n+\n+      [[nodiscard]]\n+      constexpr reference\n+      back()\n+      {\n+\t__glibcxx_check_nonempty();\n+\treturn data()[size() - 1];\n+      }\n+\n+      [[nodiscard]]\n+      constexpr const_reference\n+      back() const\n+      {\n+\t__glibcxx_check_nonempty();\n+\treturn data()[size() - 1];\n+      }\n+\n+      using _Base::data;\n+\n+      template<typename... _Args>\n+\tconstexpr _Tp&\n+\templace_back(_Args&&... __args)\n+\t{\n+\t  const auto __end = _Base::cend();\n+\t  _Tp& __res =  _Base::emplace_back(std::forward<_Args>(__args)...);\n+\t  this->_M_invalidate_if(_Equal(__end));\n+\t  return __res;\n+\t}\n+\n+      constexpr _Tp&\n+      push_back(const _Tp& __x)\n+      { return emplace_back(__x); }\n+\n+      constexpr _Tp&\n+      push_back(_Tp&& __x)\n+      { return emplace_back(std::move(__x)); }\n+\n+      template<__detail::__container_compatible_range<_Tp> _Rg>\n+\tconstexpr void\n+\tappend_range(_Rg&& __rg)\n+\t{\n+\t  const auto __size = size();\n+\t  const auto __end = _Base::cend();\n+\t  _Base::append_range(__rg);\n+\t  if (size() != __size)\n+\t    this->_M_invalidate_if(_Equal(__end));\n+\t}\n+\n+      constexpr void\n+      pop_back()\n+      {\n+\t__glibcxx_check_nonempty();\n+\t_M_invalidate_after_nth(_Base::size() - 1);\n+\t_Base::pop_back();\n+      }\n+\n+      template<typename... _Args>\n+\tconstexpr _Tp*\n+\ttry_emplace_back(_Args&&... __args)\n+\t{\n+\t  auto __end = _Base::cend();\n+\t  _Tp* __res = _Base::try_emplace_back(std::forward<_Args>(__args)...);\n+\n+\t  if (__res)\n+\t    this->_M_invalidate_if(_Equal(__end));\n+\n+\t  return __res;\n+\t}\n+\n+      constexpr _Tp*\n+      try_push_back(const _Tp& __x)\n+      {\n+\tconst auto __end = _Base::cend();\n+\t_Tp* __res = _Base::try_push_back(__x);\n+\n+\tif (__res)\n+\t  this->_M_invalidate_if(_Equal(__end));\n+\n+\treturn __res;\n+      }\n+\n+      constexpr _Tp*\n+      try_push_back(_Tp&& __x)\n+      {\n+\tconst auto __end = _Base::cend();\n+\t_Tp* __res = _Base::try_push_back(std::move(__x));\n+\n+\tif (__res)\n+\t  this->_M_invalidate_if(_Equal(__end));\n+\n+\treturn __res;\n+      }\n+\n+      template<__detail::__container_compatible_range<_Tp> _Rg>\n+\tconstexpr ranges::borrowed_iterator_t<_Rg>\n+\ttry_append_range(_Rg&& __rg)\n+\t{\n+\t  const auto __size = size();\n+\t  const auto __end = _Base::cend();\n+\t  auto __res = _Base::try_append_range(__rg);\n+\t  if (size() != __size)\n+\t    this->_M_invalidate_if(_Equal(__end));\n+\n+\t  return __res;\n+\t}\n+\n+      template<typename... _Args>\n+\tconstexpr _Tp&\n+\tunchecked_emplace_back(_Args&&... __args)\n+\t{\n+\t  const auto __end = _Base::cend();\n+\t  _Tp& __res =\n+\t    _Base::unchecked_emplace_back(std::forward<_Args>(__args)...);\n+\n+\t  this->_M_invalidate_if(_Equal(__end));\n+\n+\t  return __res;\n+\t}\n+\n+      constexpr _Tp&\n+      unchecked_push_back(const _Tp& __x)\n+      { return unchecked_emplace_back(__x); }\n+\n+      constexpr _Tp&\n+      unchecked_push_back(_Tp&& __x)\n+      { return unchecked_emplace_back(std::move(__x)); }\n+\n+      template<typename... _Args>\n+\tconstexpr iterator\n+\templace(const_iterator __position, _Args&&... __args)\n+\t{\n+\t  if (std::is_constant_evaluated())\n+\t    return iterator(_Base::emplace(__position.base(),\n+\t\t\t\t\t   std::forward<_Args>(__args)...),\n+\t\t\t    this);\n+\n+\t  __glibcxx_check_insert(__position);\n+\t  const difference_type __offset = __position.base() - _Base::cbegin();\n+\t  _Base_iterator __res = _Base::emplace(__position.base(),\n+\t\t\t\t\t\tstd::forward<_Args>(__args)...);\n+\t  _M_invalidate_after_nth(__offset);\n+\t  return { __res, this };\n+\t}\n+\n+      constexpr iterator\n+      insert(const_iterator __position, const _Tp& __x)\n+      { return emplace(__position, __x); }\n+\n+      constexpr iterator\n+      insert(const_iterator __position, _Tp&& __x)\n+      { return emplace(__position, std::move(__x)); }\n+\n+      constexpr iterator\n+      insert(const_iterator __position, size_type __n, const _Tp& __x)\n+      {\n+\tif (std::is_constant_evaluated())\n+\t  return iterator(_Base::insert(__position.base(), __n, __x), this);\n+\n+\t  __glibcxx_check_insert(__position);\n+\tconst difference_type __offset = __position.base() - _Base::cbegin();\n+\t_Base_iterator __res = _Base::insert(__position.base(), __n, __x);\n+\t_M_invalidate_after_nth(__offset);\n+\treturn { __res, this };\n+      }\n+\n+      template<__any_input_iterator _InputIterator>\n+\tconstexpr iterator\n+\tinsert(const_iterator __position, _InputIterator __first,\n+\t       _InputIterator __last)\n+\t{\n+\t  if (std::is_constant_evaluated())\n+\t    return iterator(_Base::insert(__position.base(),\n+\t\t\t\t\t  __gnu_debug::__unsafe(__first),\n+\t\t\t\t\t  __gnu_debug::__unsafe(__last)), this);\n+\n+\t  typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;\n+\t  __glibcxx_check_insert_range(__position, __first, __last, __dist);\n+\n+\t  const difference_type __offset = __position.base() - _Base::cbegin();\n+\t  _Base_iterator __res;\n+\t  if (__dist.second >= __gnu_debug::__dp_sign)\n+\t    __res = _Base::insert(__position.base(),\n+\t\t\t\t  __gnu_debug::__unsafe(__first),\n+\t\t\t\t  __gnu_debug::__unsafe(__last));\n+\t  else\n+\t    __res = _Base::insert(__position.base(), __first, __last);\n+\n+\t  _M_invalidate_after_nth(__offset);\n+\t  return { __res, this };\n+\t}\n+\n+      template<__detail::__container_compatible_range<_Tp> _Rg>\n+\tconstexpr iterator\n+\tinsert_range(const_iterator __position, _Rg&& __rg)\n+\t{\n+\t  const auto __size = size();\n+\t  const difference_type __offset = __position.base() - _Base::cbegin();\n+\t  auto __res = _Base::insert_range(__position.base(), __rg);\n+\t  if (size() > __size)\n+\t    this->_M_invalidate_after_nth(__offset);\n+\n+\t  return iterator(__res, this);\n+\t}\n+\n+      constexpr iterator\n+      insert(const_iterator __position, initializer_list<_Tp> __il)\n+      {\n+\tif (std::is_constant_evaluated())\n+\t  return iterator(_Base::insert(__position.base(), __il), this);\n+\n+\t__glibcxx_check_insert(__position);\n+\tconst auto __size = size();\n+\tdifference_type __offset = __position.base() - _Base::begin();\n+\t_Base_iterator __res = _Base::insert(__position.base(), __il);\n+\tif (size() > __size)\n+\t  this->_M_invalidate_after_nth(__offset);\n+\treturn iterator(__res, this);\n+      }\n+\n+      constexpr iterator\n+      erase(const_iterator __position)\n+      {\n+\tif (std::is_constant_evaluated())\n+\t  return iterator(_Base::erase(__position.base()), this);\n+\n+\t__glibcxx_check_erase(__position);\n+\tdifference_type __offset = __position.base() - _Base::cbegin();\n+\t_Base_iterator __res = _Base::erase(__position.base());\n+\tthis->_M_invalidate_after_nth(__offset);\n+\treturn iterator(__res, this);\n+      }\n+\n+      constexpr iterator\n+      erase(const_iterator __first, const_iterator __last)\n+      {\n+\tif (std::is_constant_evaluated())\n+\t  return iterator(_Base::erase(__first.base(), __last.base()),\n+\t\t\t  this);\n+\n+\t__glibcxx_check_erase_range(__first, __last);\n+\n+\tif (__first.base() != __last.base())\n+\t  {\n+\t    difference_type __offset = __first.base() - _Base::cbegin();\n+\t    _Base_iterator __res = _Base::erase(__first.base(),\n+\t\t\t\t\t\t__last.base());\n+\t    this->_M_invalidate_after_nth(__offset);\n+\t    return { __res, this };\n+\t  }\n+\telse\n+\t  return { _Base::begin() + (__first.base() - _Base::cbegin()), this };\n+      }\n+\n+      constexpr void\n+      swap(inplace_vector& __x)\n+      noexcept(is_nothrow_swappable_v<_Tp> && is_nothrow_move_constructible_v<_Tp>)\n+      {\n+\tthis->_M_invalidate_all();\n+\t__x._M_invalidate_all();\n+\t_Base::swap(__x);\n+      }\n+\n+      constexpr void\n+      clear() noexcept\n+      {\n+\t_Base::clear();\n+\tthis->_M_invalidate_all();\n+      }\n+\n+      constexpr friend bool\n+      operator==(const inplace_vector& __x, const inplace_vector& __y)\n+      { return __x._M_base() == __y._M_base(); }\n+\n+      constexpr friend auto\n+      operator<=>(const inplace_vector& __x, const inplace_vector& __y)\n+      requires requires (const _Tp __t) {\n+\t{ __t < __t } -> __detail::__boolean_testable;\n+      }\n+      { return __x._M_base() <=> __y._M_base(); }\n+\n+      constexpr friend void\n+      swap(inplace_vector& __x, inplace_vector& __y)\n+      noexcept( noexcept(__x.swap(__y)) )\n+      { __x.swap(__y); }\n+\n+    private:\n+      constexpr _Base&\n+      _M_base() noexcept { return *this; }\n+\n+      constexpr const _Base&\n+      _M_base() const noexcept { return *this; }\n+\n+      constexpr void\n+      _M_invalidate_after_nth(difference_type __n) noexcept\n+      {\n+\tusing _After_nth\n+\t  = __gnu_debug::_After_nth_from<_Base_const_iterator>;\n+\tthis->_M_invalidate_if(_After_nth(__n, _Base::cbegin()));\n+      }\n+    };\n+\n+  // specialization for zero capacity, that is required to be trivally copyable\n+  // and empty regardless of _Tp.\n+  template<typename _Tp>\n+    class inplace_vector<_Tp, 0>\n+    : public _GLIBCXX_STD_C::inplace_vector<_Tp, 0>\n+    {\n+      using _Base = _GLIBCXX_STD_C::inplace_vector<_Tp, 0>;\n+\n+    public:\n+      // types:\n+      using value_type = _Base::value_type;\n+      using pointer = _Base::pointer;\n+      using const_pointer = _Base::const_pointer;\n+      using reference = _Base::reference;\n+      using const_reference = _Base::const_reference;\n+      using size_type = _Base::size_type;\n+      using difference_type = _Base::difference_type;\n+      using iterator = _Base::iterator;\n+      using const_iterator = _Base::const_iterator;\n+      using reverse_iterator = _Base::reverse_iterator;\n+      using const_reverse_iterator = _Base::const_reverse_iterator;\n+\n+      inplace_vector() = default;\n+\n+      constexpr explicit\n+      inplace_vector(size_type __n) : _Base(__n) { }\n+\n+      constexpr\n+      inplace_vector(size_type __n, const _Tp& __value)\n+\t: _Base(__n, __value) { }\n+\n+      template<__any_input_iterator _InputIterator>\n+\tconstexpr\n+\tinplace_vector(_InputIterator __first, _InputIterator __last)\n+\t: _Base(__gnu_debug::__base(\n+\t\t  __glibcxx_check_valid_constructor_range(__first, __last)),\n+\t\t__gnu_debug::__base(__last)) { }\n+\n+      template <__detail::__container_compatible_range<_Tp> _Rg>\n+\tconstexpr\n+\tinplace_vector(from_range_t, _Rg&& __rg)\n+\t  : _Base(from_range_t{}, std::forward<_Rg>(__rg)) { }\n+\n+      constexpr\n+      inplace_vector(initializer_list<_Tp> __il)\n+\t: _Base(__il) { }\n+\n+      inplace_vector(const inplace_vector&) = default;\n+      inplace_vector(inplace_vector&&) = default;\n+\n+      constexpr\n+      ~inplace_vector() = default;\n+\n+      inplace_vector&\n+      operator=(const inplace_vector&) = default;\n+\n+      inplace_vector&\n+      operator=(inplace_vector&&) = default;\n+\n+      constexpr inplace_vector&\n+      operator=(initializer_list<_Tp> __il)\n+      {\n+\t_Base::operator=(__il);\n+\treturn *this;\n+      }\n+\n+      constexpr void\n+      swap(inplace_vector& __x)\n+      noexcept\n+      { }\n+    };\n+} // namespace __debug\n+\n+_GLIBCXX_BEGIN_NAMESPACE_VERSION\n+\n+  template<typename _Tp, size_t _Nm, typename _Predicate>\n+    constexpr size_t\n+    erase_if(__debug::inplace_vector<_Tp, _Nm>& __cont, _Predicate __pred)\n+    {\n+      if constexpr (_Nm != 0)\n+\t{\n+\t  _GLIBCXX_STD_C::inplace_vector<_Tp, _Nm>& __ucont = __cont;\n+\t  const auto __osz = __cont.size();\n+\t  const auto __end = __ucont.end();\n+\t  auto __removed = std::__remove_if(__ucont.begin(), __end,\n+\t\t\t\t\t    std::move(__pred));\n+\t  if (__removed != __end)\n+\t    {\n+\t      __cont.erase(__niter_wrap(__cont.cbegin(), __removed),\n+\t\t\t   __cont.cend());\n+\t      return __osz - __cont.size();\n+\t    }\n+\t}\n+\n+      return 0;\n+    }\n+\n+  template<typename _Tp, size_t _Nm, typename _Up = _Tp>\n+    constexpr size_t\n+    erase(__debug::inplace_vector<_Tp, _Nm>& __cont, const _Up& __value)\n+    { return std::erase_if(__cont, __gnu_cxx::__ops::__equal_to(__value)); }\n+\n+_GLIBCXX_END_NAMESPACE_VERSION\n+} // namespace std\n+\n+#endif // __glibcxx_inplace_vector\n+#endif // _GLIBCXX_DEBUG_INPLACE_VECTOR\ndiff --git a/libstdc++-v3/include/debug/safe_base.h b/libstdc++-v3/include/debug/safe_base.h\nindex 44622970792b..7491cc0ebe2f 100644\n--- a/libstdc++-v3/include/debug/safe_base.h\n+++ b/libstdc++-v3/include/debug/safe_base.h\n@@ -254,12 +254,30 @@ namespace __gnu_debug\n     /** Notify all iterators that reference this sequence that the\n \tsequence is being destroyed. */\n     _GLIBCXX20_CONSTEXPR\n-    ~_Safe_sequence_base()\n+    ~_Safe_sequence_base() _GLIBCXX_NOEXCEPT\n     {\n       if (!std::__is_constant_evaluated())\n \tthis->_M_detach_all();\n     }\n \n+    // Copy assignment invalidate all iterators.\n+    _GLIBCXX20_CONSTEXPR _Safe_sequence_base&\n+    operator=(const _Safe_sequence_base&) _GLIBCXX_NOEXCEPT\n+    {\n+      _M_invalidate_all();\n+      return *this;\n+    }\n+\n+#if __cplusplus >= 201103L\n+    _GLIBCXX20_CONSTEXPR _Safe_sequence_base&\n+    operator=(_Safe_sequence_base&& __x) noexcept\n+    {\n+      _M_invalidate_all();\n+      __x._M_invalidate_all();\n+      return *this;\n+    }\n+#endif\n+\n     /** Detach all iterators, leaving them singular. */\n     void\n     _M_detach_all() const;\n@@ -292,7 +310,7 @@ namespace __gnu_debug\n     _M_get_mutex() const _GLIBCXX_USE_NOEXCEPT;\n \n     /** Invalidates all iterators. */\n-    void\n+    _GLIBCXX20_CONSTEXPR void\n     _M_invalidate_all() const\n     { if (++_M_version == 0) _M_version = 1; }\n \ndiff --git a/libstdc++-v3/include/debug/safe_container.h b/libstdc++-v3/include/debug/safe_container.h\nindex 3341806fd596..2d0fbb8110e0 100644\n--- a/libstdc++-v3/include/debug/safe_container.h\n+++ b/libstdc++-v3/include/debug/safe_container.h\n@@ -86,17 +86,22 @@ namespace __gnu_debug\n       { }\n #endif\n \n-      // Copy assignment invalidate all iterators.\n-      _GLIBCXX20_CONSTEXPR\n+#if __cplusplus < 201103L\n       _Safe_container&\n-      operator=(const _Safe_container&) _GLIBCXX_NOEXCEPT\n+      operator=(const _Safe_container& __x)\n       {\n-\tif (!std::__is_constant_evaluated())\n-\t  this->_M_invalidate_all();\n+\t_Base::operator=(__x);\n \treturn *this;\n       }\n \n-#if __cplusplus >= 201103L\n+      void\n+      _M_swap(const _Safe_container& __x) const throw()\n+      { _Base::_M_swap(__x); }\n+#else\n+      _GLIBCXX20_CONSTEXPR\n+      _Safe_container&\n+      operator=(const _Safe_container&) noexcept = default;\n+\n       _GLIBCXX20_CONSTEXPR\n       _Safe_container&\n       operator=(_Safe_container&& __x) noexcept\n@@ -146,10 +151,6 @@ namespace __gnu_debug\n \n \t_M_swap_base(__x);\n       }\n-#else\n-      void\n-      _M_swap(const _Safe_container& __x) const throw()\n-      { _Base::_M_swap(__x); }\n #endif\n     };\n \ndiff --git a/libstdc++-v3/include/debug/safe_iterator.h b/libstdc++-v3/include/debug/safe_iterator.h\nindex e0b1b46939c3..80ed9570ecb4 100644\n--- a/libstdc++-v3/include/debug/safe_iterator.h\n+++ b/libstdc++-v3/include/debug/safe_iterator.h\n@@ -1114,21 +1114,31 @@ namespace __gnu_debug\n \n   /** Safe iterators know how to check if they form a valid range. */\n   template<typename _Iterator, typename _Sequence, typename _Category>\n+    _GLIBCXX20_CONSTEXPR\n     inline bool\n     __valid_range(const _Safe_iterator<_Iterator, _Sequence,\n \t\t\t\t       _Category>& __first,\n \t\t  const _Safe_iterator<_Iterator, _Sequence,\n \t\t\t\t       _Category>& __last,\n \t\t  typename _Distance_traits<_Iterator>::__type& __dist)\n-    { return __first._M_valid_range(__last, __dist); }\n+    {\n+      if (std::__is_constant_evaluated())\n+\treturn true;\n+\n+      return __first._M_valid_range(__last, __dist);\n+    }\n \n   template<typename _Iterator, typename _Sequence, typename _Category>\n+    _GLIBCXX20_CONSTEXPR\n     inline bool\n     __valid_range(const _Safe_iterator<_Iterator, _Sequence,\n \t\t\t\t       _Category>& __first,\n \t\t  const _Safe_iterator<_Iterator, _Sequence,\n \t\t\t\t       _Category>& __last)\n     {\n+      if (std::__is_constant_evaluated())\n+\treturn true;\n+\n       typename _Distance_traits<_Iterator>::__type __dist;\n       return __first._M_valid_range(__last, __dist);\n     }\ndiff --git a/libstdc++-v3/include/debug/safe_sequence.h b/libstdc++-v3/include/debug/safe_sequence.h\nindex e10474aae79c..c908d1e47a90 100644\n--- a/libstdc++-v3/include/debug/safe_sequence.h\n+++ b/libstdc++-v3/include/debug/safe_sequence.h\n@@ -46,6 +46,7 @@ namespace __gnu_debug\n       _Type __value;\n \n     public:\n+      _GLIBCXX20_CONSTEXPR\n       explicit _Not_equal_to(const _Type& __v) : __value(__v) { }\n \n       bool\n@@ -61,6 +62,7 @@ namespace __gnu_debug\n       _Type __value;\n \n     public:\n+      _GLIBCXX20_CONSTEXPR\n       explicit _Equal_to(const _Type& __v) : __value(__v) { }\n \n       bool\n@@ -80,6 +82,7 @@ namespace __gnu_debug\n       difference_type _M_n;\n \n     public:\n+      _GLIBCXX20_CONSTEXPR\n       _After_nth_from(const difference_type& __n, const _Iterator& __base)\n       : _M_base(__base), _M_n(__n) { }\n \n@@ -113,7 +116,7 @@ namespace __gnu_debug\n \t  true. @c __pred will be invoked with the normal iterators nested\n \t  in the safe ones. */\n       template<typename _Predicate>\n-\tvoid\n+\t_GLIBCXX20_CONSTEXPR void\n \t_M_invalidate_if(_Predicate __pred) const;\n \n       /** Transfers all iterators @c x that reference @c from sequence,\n@@ -132,10 +135,31 @@ namespace __gnu_debug\n     class _Safe_node_sequence\n     : public _Safe_sequence<_Sequence>\n     {\n+    public:\n+      _GLIBCXX20_CONSTEXPR _Safe_node_sequence&\n+      operator=(const _Safe_node_sequence&) _GLIBCXX_NOEXCEPT\n+      {\n+\t_M_invalidate_all();\n+\treturn *this;\n+      }\n+\n+#if __cplusplus >= 201103L\n+    _GLIBCXX20_CONSTEXPR _Safe_node_sequence&\n+    operator=(_Safe_node_sequence&& __x) noexcept\n+    {\n+      _M_invalidate_all();\n+      __x._M_invalidate_all();\n+      return *this;\n+    }\n+#endif\n+\n     protected:\n-      void\n+      _GLIBCXX20_CONSTEXPR void\n       _M_invalidate_all() const\n       {\n+\tif (std::__is_constant_evaluated())\n+\t  return;\n+\n \ttypedef typename _Sequence::const_iterator _Const_iterator;\n \ttypedef typename _Const_iterator::iterator_type _Base_const_iterator;\n \ttypedef __gnu_debug::_Not_equal_to<_Base_const_iterator> _Not_equal;\ndiff --git a/libstdc++-v3/include/debug/safe_sequence.tcc b/libstdc++-v3/include/debug/safe_sequence.tcc\nindex 053361dff3c0..720a18427525 100644\n--- a/libstdc++-v3/include/debug/safe_sequence.tcc\n+++ b/libstdc++-v3/include/debug/safe_sequence.tcc\n@@ -33,10 +33,13 @@ namespace __gnu_debug\n {\n   template<typename _Sequence>\n     template<typename _Predicate>\n-      void\n+      _GLIBCXX20_CONSTEXPR void\n       _Safe_sequence<_Sequence>::\n       _M_invalidate_if(_Predicate __pred) const\n       {\n+\tif (std::__is_constant_evaluated())\n+\t  return;\n+\n \ttypedef typename _Sequence::iterator iterator;\n \ttypedef typename _Sequence::const_iterator const_iterator;\n \ndiff --git a/libstdc++-v3/include/std/inplace_vector b/libstdc++-v3/include/std/inplace_vector\nindex 7aa6f9d4ab28..0f7716cb64de 100644\n--- a/libstdc++-v3/include/std/inplace_vector\n+++ b/libstdc++-v3/include/std/inplace_vector\n@@ -35,7 +35,7 @@\n #define __glibcxx_want_inplace_vector\n #include <bits/version.h>\n \n-#ifdef __glibcxx_inplace_vector // C++ >= 26 \n+#ifdef __glibcxx_inplace_vector // C++ >= 26\n #include <compare>\n #include <initializer_list>\n #include <bits/range_access.h>\n@@ -49,6 +49,7 @@\n namespace std _GLIBCXX_VISIBILITY(default)\n {\n _GLIBCXX_BEGIN_NAMESPACE_VERSION\n+_GLIBCXX_BEGIN_NAMESPACE_CONTAINER\n \n   // [indirect], class template indirect\n   template<typename _Tp, size_t _Nm>\n@@ -1329,32 +1330,40 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION\n       { }\n     };\n \n+_GLIBCXX_END_NAMESPACE_CONTAINER\n+\n   template<typename _Tp, size_t _Nm, typename _Predicate>\n     constexpr size_t\n-    erase_if(inplace_vector<_Tp, _Nm>& __cont, _Predicate __pred)\n+    erase_if(_GLIBCXX_STD_C::inplace_vector<_Tp, _Nm>& __cont,\n+\t     _Predicate __pred)\n     {\n-      using namespace __gnu_cxx;\n-      const auto __osz = __cont.size();\n-      const auto __end = __cont.end();\n-      auto __removed = std::__remove_if(__cont.begin(), __end,\n-\t\t\t\t\tstd::move(__pred));\n-      if (__removed != __end)\n+      if constexpr (_Nm != 0)\n \t{\n-\t  __cont.erase(__niter_wrap(__cont.begin(), __removed),\n-\t\t       __cont.end());\n-\t  return __osz - __cont.size();\n+\t  const auto __osz = __cont.size();\n+\t  const auto __end = __cont.end();\n+\t  auto __removed = std::__remove_if(__cont.begin(), __end,\n+\t\t\t\t\t    std::move(__pred));\n+\t  if (__removed != __end)\n+\t    {\n+\t      __cont.erase(__removed, __end);\n+\t      return __osz - __cont.size();\n+\t    }\n \t}\n+\n       return 0;\n     }\n \n-\n   template<typename _Tp, size_t _Nm, typename _Up = _Tp>\n     constexpr  size_t\n-    erase(inplace_vector<_Tp, _Nm>& __cont, const _Up& __value)\n+    erase(_GLIBCXX_STD_C::inplace_vector<_Tp, _Nm>& __cont, const _Up& __value)\n     { return std::erase_if(__cont, __gnu_cxx::__ops::__equal_to(__value)); }\n \n _GLIBCXX_END_NAMESPACE_VERSION\n } // namespace\n \n+#ifdef _GLIBCXX_DEBUG\n+# include <debug/inplace_vector>\n+#endif\n+\n #endif // __glibcxx_inplace_vector\n #endif // _GLIBCXX_INPLACE_VECTOR\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc\nindex e9c2cdc8665a..45685c2beccf 100644\n--- a/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/cons/1.cc\n@@ -24,7 +24,7 @@ struct U\n };\n \n // n5008 inplace.vector.overview says for inplace_vector<T, 0>\n-// provides trivial copy/move/default cosntructpr regardless of T\n+// provides trivial copy/move/default constructor regardless of T\n struct Z\n {\n   constexpr Z(int) {}\n@@ -52,11 +52,13 @@ static_assert(!std::is_trivially_default_constructible_v<std::inplace_vector<N,\n static_assert(!std::is_trivially_default_constructible_v<std::inplace_vector<D, 2>>);\n static_assert(!std::is_trivially_default_constructible_v<std::inplace_vector<U, 2>>);\n \n+#if !_GLIBCXX_DEBUG\n static_assert(std::is_trivially_destructible_v<std::inplace_vector<int, 2>>);\n static_assert(std::is_trivially_destructible_v<std::inplace_vector<X, 2>>);\n static_assert(std::is_trivially_destructible_v<std::inplace_vector<N, 2>>);\n static_assert(!std::is_trivially_destructible_v<std::inplace_vector<D, 2>>);\n static_assert(std::is_trivially_destructible_v<std::inplace_vector<U, 2>>);\n+#endif\n \n static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<int, 0>>);\n static_assert(std::is_nothrow_default_constructible_v<std::inplace_vector<X, 0>>);\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc\nindex d149e63970c9..917eebd80f7c 100644\n--- a/libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/copy.cc\n@@ -72,12 +72,14 @@ static_assert(!std::is_nothrow_copy_constructible_v<std::inplace_vector<N<false,\n static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<D, 2>>);\n static_assert(!std::is_nothrow_copy_constructible_v<std::inplace_vector<U, 2>>);\n \n+#if !_GLIBCXX_DEBUG\n static_assert(std::is_trivially_copy_constructible_v<std::inplace_vector<int, 2>>);\n static_assert(!std::is_trivially_copy_constructible_v<std::inplace_vector<X, 2>>);\n static_assert(!std::is_trivially_copy_constructible_v<std::inplace_vector<N<true, true>, 2>>);\n // is_trivially_copy_constructible_v checks destructor\n static_assert(!std::is_trivially_copy_constructible_v<std::inplace_vector<D, 2>>);\n static_assert(std::is_trivially_copy_constructible_v<std::inplace_vector<U, 2>>);\n+#endif\n \n static_assert(std::is_copy_assignable_v<std::inplace_vector<int, 2>>);\n static_assert(std::is_copy_assignable_v<std::inplace_vector<X, 2>>);\n@@ -96,6 +98,7 @@ static_assert(!std::is_nothrow_copy_assignable_v<std::inplace_vector<N<false, fa\n static_assert(std::is_nothrow_copy_assignable_v<std::inplace_vector<D, 2>>);\n static_assert(!std::is_nothrow_copy_assignable_v<std::inplace_vector<U, 2>>);\n \n+#if !_GLIBCXX_DEBUG\n // conditional noexcept here is libstdc++ extension,\n static_assert(std::is_trivially_copy_assignable_v<std::inplace_vector<int, 2>>);\n static_assert(!std::is_trivially_copy_assignable_v<std::inplace_vector<X, 2>>);\n@@ -103,6 +106,7 @@ static_assert(!std::is_trivially_copy_assignable_v<std::inplace_vector<N<true, t\n // destructor is not trivial\n static_assert(!std::is_trivially_copy_assignable_v<std::inplace_vector<D, 2>>);\n static_assert(std::is_trivially_copy_assignable_v<std::inplace_vector<U, 2>>);\n+#endif\n \n static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<int, 0>>);\n static_assert(std::is_nothrow_copy_constructible_v<std::inplace_vector<X, 0>>);\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign1_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign1_neg.cc\nnew file mode 100644\nindex 000000000000..37c80c32bbde\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign1_neg.cc\n@@ -0,0 +1,16 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_assign1<std::inplace_vector<int, 10> >();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign2_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign2_neg.cc\nnew file mode 100644\nindex 000000000000..ff6c9a73acc7\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign2_neg.cc\n@@ -0,0 +1,16 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_assign2<std::inplace_vector<int, 10>>();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign3_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign3_neg.cc\nnew file mode 100644\nindex 000000000000..42f811d07e11\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign3_neg.cc\n@@ -0,0 +1,16 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_assign3<std::inplace_vector<int, 10>>();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign4_backtrace_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign4_backtrace_neg.cc\nnew file mode 100644\nindex 000000000000..dec72289fbcb\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign4_backtrace_neg.cc\n@@ -0,0 +1,17 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+// { dg-options \"-D_GLIBCXX_DEBUG_BACKTRACE -lstdc++exp\" }\n+// { dg-require-cpp-feature-test __cpp_lib_stacktrace }\n+\n+#include <debug/inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_assign1<__gnu_debug::inplace_vector<int, 10>>();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign4_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign4_neg.cc\nnew file mode 100644\nindex 000000000000..4bed3456e78b\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/assign4_neg.cc\n@@ -0,0 +1,15 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+\n+#include <debug/inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_assign1<__gnu_debug::inplace_vector<int, 10>>();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct1_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct1_neg.cc\nnew file mode 100644\nindex 000000000000..28ede4c47b92\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct1_neg.cc\n@@ -0,0 +1,16 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_construct1<std::inplace_vector<int, 10> >();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct2_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct2_neg.cc\nnew file mode 100644\nindex 000000000000..be37ddeaaf2d\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct2_neg.cc\n@@ -0,0 +1,16 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_construct2<std::inplace_vector<int, 10> >();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct3_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct3_neg.cc\nnew file mode 100644\nindex 000000000000..80861831b480\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct3_neg.cc\n@@ -0,0 +1,16 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_construct3<std::inplace_vector<int, 10> >();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct4_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct4_neg.cc\nnew file mode 100644\nindex 000000000000..099b35727aeb\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/construct4_neg.cc\n@@ -0,0 +1,15 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+\n+#include <debug/inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_construct1<__gnu_debug::inplace_vector<int, 10> >();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/debug_functions.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/debug_functions.cc\nnew file mode 100644\nindex 000000000000..bc5ed50113f7\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/debug_functions.cc\n@@ -0,0 +1,34 @@\n+// { dg-do run { target c++26 } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+void test02()\n+{\n+  using namespace __gnu_debug;\n+\n+  std::inplace_vector<int, 10> v1(3, 1);\n+  VERIFY( !__check_singular(v1.begin()) );\n+  auto it = v1.begin();\n+  VERIFY( !__check_singular(it) );\n+\n+  VERIFY( !__check_singular(v1.end()) );\n+  it = v1.end();\n+  VERIFY( !__check_singular(it) );\n+\n+  v1.clear();\n+\n+  VERIFY( it._M_singular() );\n+  VERIFY( __check_singular(it) );\n+\n+  it = v1.end();\n+  VERIFY( !it._M_singular() );\n+  VERIFY( !__check_singular(it) );\n+}\n+\n+int main()\n+{\n+  test02();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/erase.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/erase.cc\nnew file mode 100644\nindex 000000000000..94da94627f37\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/erase.cc\n@@ -0,0 +1,35 @@\n+// { dg-do run { target c++26 } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+void test01()\n+{\n+  std::inplace_vector<int, 10> v;\n+\n+  for (int i = 0; i != 10; ++i)\n+    v.push_back(i);\n+\n+  auto before = v.begin() + 4;\n+  auto last = v.end() - 1;\n+\n+  VERIFY( std::erase(v, 6) == 1 );\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_singular());\n+}\n+\n+void test02()\n+{\n+  std::inplace_vector<int, 0> v;\n+\n+  VERIFY( std::erase(v, 6) == 0 );\n+}\n+\n+int main()\n+{\n+  test01();\n+  test02();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert1_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert1_neg.cc\nnew file mode 100644\nindex 000000000000..f85cfaa90b42\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert1_neg.cc\n@@ -0,0 +1,16 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_insert1<std::inplace_vector<int, 10>>();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert2_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert2_neg.cc\nnew file mode 100644\nindex 000000000000..6a203696ec98\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert2_neg.cc\n@@ -0,0 +1,16 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_insert2<std::inplace_vector<int, 10>>();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert3_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert3_neg.cc\nnew file mode 100644\nindex 000000000000..63f6e05d6550\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert3_neg.cc\n@@ -0,0 +1,16 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_insert3<std::inplace_vector<int, 10>>();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert4_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert4_neg.cc\nnew file mode 100644\nindex 000000000000..59e9f4b1722f\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert4_neg.cc\n@@ -0,0 +1,15 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+\n+#include <debug/inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_insert1<__gnu_debug::inplace_vector<int, 10>>();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert5_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert5_neg.cc\nnew file mode 100644\nindex 000000000000..e1fbd65b7112\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert5_neg.cc\n@@ -0,0 +1,16 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+// { dg-require-debug-mode \"\" }\n+\n+#include <inplace_vector>\n+#include <debug/checks.h>\n+\n+void test01()\n+{\n+  __gnu_test::check_insert4<std::inplace_vector<int, 10>>();\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert7_neg.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert7_neg.cc\nnew file mode 100644\nindex 000000000000..c59453cc5183\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/insert7_neg.cc\n@@ -0,0 +1,24 @@\n+// { dg-do run { target c++26 xfail *-*-* } }\n+\n+#include <memory>\n+#include <iterator>\n+#include <debug/inplace_vector>\n+\n+void\n+test01()\n+{\n+  __gnu_debug::inplace_vector<std::unique_ptr<int>, 10> v;\n+\n+  v.emplace_back(new int(0));\n+  v.emplace_back(new int(1));\n+\n+  v.insert(begin(v) + 1,\n+\t   make_move_iterator(begin(v)),\n+\t   make_move_iterator(end(v)));\n+}\n+\n+int\n+main()\n+{\n+  test01();\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/1.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/1.cc\nnew file mode 100644\nindex 000000000000..1a852739de00\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/1.cc\n@@ -0,0 +1,33 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+// Assignment\n+void test01()\n+{\n+  inplace_vector<int, 30> v1;\n+  inplace_vector<int, 30> v2;\n+\n+  auto i = v1.end();\n+  VERIFY(!i._M_dereferenceable() && !i._M_singular());\n+\n+  v1 = v2;\n+  VERIFY(i._M_singular());\n+\n+  i = v1.end();\n+  v1.assign(v2.begin(), v2.end());\n+  VERIFY( !i._M_singular() );\n+\n+  i = v1.end();\n+  v1.assign(17, 42);\n+  VERIFY(i._M_singular());\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/2.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/2.cc\nnew file mode 100644\nindex 000000000000..22d512ca107c\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/2.cc\n@@ -0,0 +1,34 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+// Resize\n+void test01()\n+{\n+  inplace_vector<int, 50> v(10, 17);\n+  v.reserve(20);\n+\n+  auto before = v.begin() + 6;\n+  auto at = before + 1;\n+  auto after = at + 1;\n+\n+  // Shrink.\n+  v.resize(7);\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(at._M_singular());\n+  VERIFY(after._M_singular());\n+\n+  // Grow.\n+  before = v.begin() + 6;\n+  v.resize(17);\n+  VERIFY(before._M_dereferenceable());\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/3.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/3.cc\nnew file mode 100644\nindex 000000000000..7b742131d485\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/3.cc\n@@ -0,0 +1,43 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+// Insert\n+void test01()\n+{\n+  inplace_vector<int, 100> v(10, 17);\n+  v.reserve(30);\n+\n+  // Insert a single element\n+  auto before = v.begin() + 6;\n+  auto at = before + 1;\n+  auto after = at;\n+  at = v.insert(at, 42);\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(at._M_dereferenceable());\n+  VERIFY(after._M_singular());\n+\n+  // Insert multiple copies\n+  before = v.begin() + 6;\n+  at = before + 1;\n+  v.insert(at, 3, 42);\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(at._M_singular());\n+\n+  // Insert iterator range\n+  static int data[] = { 2, 3, 5, 7 };\n+  before = v.begin() + 6;\n+  at = before + 1;\n+  v.insert(at, &data[0], &data[0] + 4);\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(at._M_singular());\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/4.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/4.cc\nnew file mode 100644\nindex 000000000000..7393f1ba4eee\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/4.cc\n@@ -0,0 +1,40 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+// Erase\n+void test04()\n+{\n+  inplace_vector<int, 30> v(20, 42);\n+\n+  // Single element erase\n+  auto before = v.begin();\n+  auto at = before + 3;\n+  auto after = at;\n+  at = v.erase(at);\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(at._M_dereferenceable());\n+  VERIFY(after._M_singular());\n+\n+  // Multiple element erase\n+  before = v.begin();\n+  at = before + 3;\n+  v.erase(at, at + 3);\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(at._M_singular());\n+\n+  // clear()\n+  before = v.begin();\n+  VERIFY(before._M_dereferenceable());\n+  v.clear();\n+  VERIFY(before._M_singular());\n+}\n+\n+int main()\n+{\n+  test04();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/append_range.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/append_range.cc\nnew file mode 100644\nindex 000000000000..8a793ec92b62\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/append_range.cc\n@@ -0,0 +1,45 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+void test01()\n+{\n+  inplace_vector<int, 100> v(10, 17);\n+  inplace_vector<int, 10> v1(10, 19);\n+\n+  auto before = v.begin() + 6;\n+  auto last = v.end();\n+  auto end = last--;\n+\n+  v.append_range(v1);\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_dereferenceable());\n+  VERIFY(end._M_singular());\n+}\n+\n+void test02()\n+{\n+  inplace_vector<int, 100> v(10, 17);\n+  inplace_vector<int, 0> v1;\n+\n+  auto before = v.begin() + 6;\n+  auto last = v.end();\n+  auto end = last--;\n+\n+  v.append_range(v1);\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_dereferenceable());\n+  VERIFY(!end._M_singular());\n+}\n+\n+int main()\n+{\n+  test01();\n+  test02();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/erase.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/erase.cc\nnew file mode 100644\nindex 000000000000..6e899d72b792\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/erase.cc\n@@ -0,0 +1,36 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+void test01()\n+{\n+  inplace_vector<int, 10> v;\n+\n+  for (int i = 0; i != 10; ++i)\n+    v.push_back(i);\n+\n+  auto before = v.begin() + 4;\n+  auto last = v.end() - 1;\n+\n+  VERIFY( std::erase(v, 6) == 1 );\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_singular());\n+}\n+\n+void test02()\n+{\n+  inplace_vector<int, 0> v;\n+\n+  VERIFY( std::erase(v, 6) == 0 );\n+}\n+\n+int main()\n+{\n+  test01();\n+  test02();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/pop_back.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/pop_back.cc\nnew file mode 100644\nindex 000000000000..4c1a04338878\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/pop_back.cc\n@@ -0,0 +1,27 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+void test01()\n+{\n+  inplace_vector<int, 100> v(10, 17);\n+\n+  auto before = v.begin() + 6;\n+  auto last = v.end();\n+  auto end = last--;\n+\n+  v.pop_back();\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_singular());\n+  VERIFY(end._M_singular());\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/push_back.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/push_back.cc\nnew file mode 100644\nindex 000000000000..f269364cf5b2\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/push_back.cc\n@@ -0,0 +1,53 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+void test01()\n+{\n+  inplace_vector<int, 100> v(10, 17);\n+\n+  auto before = v.begin() + 6;\n+  auto last = v.end();\n+  auto end = last--;\n+\n+  v.push_back(42);\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_dereferenceable());\n+  VERIFY(end._M_singular());\n+}\n+\n+#if __cpp_exceptions\n+void test02()\n+{\n+  inplace_vector<int, 10> v(10, 17);\n+\n+  auto before = v.begin() + 6;\n+  auto last = v.end();\n+  auto end = last--;\n+  try\n+    {\n+      v.push_back(42);\n+      VERIFY( false );\n+    }\n+  catch (std::bad_alloc&)\n+    {\n+    }\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_dereferenceable());\n+  VERIFY(!end._M_singular());\n+}\n+#endif\n+\n+int main()\n+{\n+  test01();\n+#if __cpp_exceptions\n+  test02();\n+#endif\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/swap.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/swap.cc\nnew file mode 100644\nindex 000000000000..3e5ab7409b6c\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/swap.cc\n@@ -0,0 +1,53 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+void test01()\n+{\n+  inplace_vector<int, 10> v1;\n+  inplace_vector<int, 10> v2;\n+\n+  for (int i = 0; i != 10; ++i)\n+    {\n+      v1.push_back(i);\n+      v2.push_back(i);\n+    }\n+\n+  auto it1 = v1.begin();\n+  auto it2 = v2.begin();\n+\n+  std::swap(v1, v2);\n+\n+  VERIFY(it1._M_singular());\n+  VERIFY(it2._M_singular());\n+}\n+\n+void test02()\n+{\n+  inplace_vector<int, 10> v1;\n+  inplace_vector<int, 10> v2;\n+\n+  for (int i = 0; i != 10; ++i)\n+    {\n+      v1.push_back(i);\n+      v2.push_back(i);\n+    }\n+\n+  auto it1 = v1.begin();\n+  auto it2 = v2.begin();\n+\n+  swap(v1, v2);\n+\n+  VERIFY(it1._M_singular());\n+  VERIFY(it2._M_singular());\n+}\n+\n+int main()\n+{\n+  test01();\n+  test02();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_append_range.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_append_range.cc\nnew file mode 100644\nindex 000000000000..ae4ac418f501\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_append_range.cc\n@@ -0,0 +1,45 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+void test01()\n+{\n+  inplace_vector<int, 100> v(10, 17);\n+  inplace_vector<int, 10> v1(10, 19);\n+\n+  auto before = v.begin() + 6;\n+  auto last = v.end();\n+  auto end = last--;\n+\n+  v.try_append_range(v1);\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_dereferenceable());\n+  VERIFY(end._M_singular());\n+}\n+\n+void test02()\n+{\n+  inplace_vector<int, 100> v(10, 17);\n+  inplace_vector<int, 0> v1;\n+\n+  auto before = v.begin() + 6;\n+  auto last = v.end();\n+  auto end = last--;\n+\n+  v.try_append_range(v1);\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_dereferenceable());\n+  VERIFY(!end._M_singular());\n+}\n+\n+int main()\n+{\n+  test01();\n+  test02();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_emplace_back.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_emplace_back.cc\nnew file mode 100644\nindex 000000000000..f7c8c7a9ba20\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_emplace_back.cc\n@@ -0,0 +1,27 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+void test01()\n+{\n+  inplace_vector<int, 100> v(10, 17);\n+\n+  auto before = v.begin() + 6;\n+  auto last = v.end();\n+  auto end = last--;\n+\n+  VERIFY( v.try_emplace_back(42) != nullptr );\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_dereferenceable());\n+  VERIFY(end._M_singular());\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_push_back.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_push_back.cc\nnew file mode 100644\nindex 000000000000..04fc010e5003\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/try_push_back.cc\n@@ -0,0 +1,45 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+void test01()\n+{\n+  inplace_vector<int, 100> v(10, 17);\n+\n+  auto before = v.begin() + 6;\n+  auto last = v.end();\n+  auto end = last--;\n+\n+  VERIFY( v.try_push_back(42) != nullptr );\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_dereferenceable());\n+  VERIFY(end._M_singular());\n+}\n+\n+void test02()\n+{\n+  std::vector<int> vv { 0, 1, 2, 3, 4, 5 };\n+  inplace_vector<std::vector<int>, 100> v(10, vv);\n+\n+  auto before = v.begin() + 6;\n+  auto last = v.end();\n+  auto end = last--;\n+\n+  VERIFY( v.try_push_back(std::move(vv)) != nullptr );\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_dereferenceable());\n+  VERIFY(end._M_singular());\n+}\n+\n+int main()\n+{\n+  test01();\n+  test02();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/unchecked_emplace_back.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/unchecked_emplace_back.cc\nnew file mode 100644\nindex 000000000000..0d173d5885d5\n--- /dev/null\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/debug/invalidation/unchecked_emplace_back.cc\n@@ -0,0 +1,27 @@\n+// { dg-do run { target c++26 } }\n+\n+#include <debug/inplace_vector>\n+#include <testsuite_hooks.h>\n+\n+using __gnu_debug::inplace_vector;\n+\n+void test01()\n+{\n+  inplace_vector<int, 100> v(10, 17);\n+\n+  auto before = v.begin() + 6;\n+  auto last = v.end();\n+  auto end = last--;\n+\n+  v.unchecked_emplace_back(42);\n+\n+  VERIFY(before._M_dereferenceable());\n+  VERIFY(last._M_dereferenceable());\n+  VERIFY(end._M_singular());\n+}\n+\n+int main()\n+{\n+  test01();\n+  return 0;\n+}\ndiff --git a/libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc b/libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc\nindex 5abcc8764bd5..e8703e027fe3 100644\n--- a/libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc\n+++ b/libstdc++-v3/testsuite/23_containers/inplace_vector/move.cc\n@@ -91,12 +91,14 @@ static_assert(!std::is_nothrow_move_constructible_v<std::inplace_vector<N<false,\n static_assert(std::is_nothrow_move_constructible_v<std::inplace_vector<D, 2>>);\n static_assert(!std::is_nothrow_move_constructible_v<std::inplace_vector<U, 2>>);\n \n+#if !_GLIBCXX_DEBUG\n static_assert(std::is_trivially_move_constructible_v<std::inplace_vector<int, 2>>);\n static_assert(!std::is_trivially_move_constructible_v<std::inplace_vector<X, 2>>);\n static_assert(!std::is_trivially_move_constructible_v<std::inplace_vector<N<true, true>, 2>>);\n // is_trivially_move_constructible_v checks destructor\n static_assert(!std::is_trivially_move_constructible_v<std::inplace_vector<D, 2>>);\n static_assert(std::is_trivially_move_constructible_v<std::inplace_vector<U, 2>>);\n+#endif\n \n static_assert(std::is_move_assignable_v<std::inplace_vector<int, 2>>);\n static_assert(std::is_move_assignable_v<std::inplace_vector<X, 2>>);\n@@ -115,12 +117,14 @@ static_assert(!std::is_nothrow_move_assignable_v<std::inplace_vector<N<false, fa\n static_assert(std::is_nothrow_move_assignable_v<std::inplace_vector<D, 2>>);\n static_assert(!std::is_nothrow_move_assignable_v<std::inplace_vector<U, 2>>);\n \n+#if !_GLIBCXX_DEBUG\n static_assert(std::is_trivially_move_assignable_v<std::inplace_vector<int, 2>>);\n static_assert(!std::is_trivially_move_assignable_v<std::inplace_vector<X, 2>>);\n static_assert(!std::is_trivially_move_assignable_v<std::inplace_vector<N<true, true>, 2>>);\n // destructor is not trivial\n static_assert(!std::is_trivially_move_assignable_v<std::inplace_vector<D, 2>>);\n static_assert(std::is_trivially_move_assignable_v<std::inplace_vector<U, 2>>);\n+#endif\n \n static_assert(std::is_nothrow_swappable_v<std::inplace_vector<int, 2>>);\n static_assert(!std::is_nothrow_swappable_v<std::inplace_vector<X, 2>>);\ndiff --git a/libstdc++-v3/testsuite/util/debug/checks.h b/libstdc++-v3/testsuite/util/debug/checks.h\nindex 938cddabf6d3..528c021b1d75 100644\n--- a/libstdc++-v3/testsuite/util/debug/checks.h\n+++ b/libstdc++-v3/testsuite/util/debug/checks.h\n@@ -19,10 +19,12 @@\n #include <vector>\n #include <deque>\n #include <list>\n+#include <inplace_vector>\n #ifndef _GLIBCXX_DEBUG\n #  include <debug/vector>\n #  include <debug/deque>\n #  include <debug/list>\n+#  include <debug/inplace_vector>\n #endif\n #include <testsuite_hooks.h>\n \n@@ -88,10 +90,11 @@ namespace __gnu_test\n     void\n     check_assign1()\n     {\n+      using namespace std;\n       typedef _Tp cont_type;\n       typedef typename cont_type::value_type cont_val_type;\n       typedef typename CopyableValueType<cont_val_type>::value_type val_type;\n-      typedef std::vector<val_type> vector_type;\n+      typedef _GLIBCXX_STD_C::vector<val_type> vector_type;\n \n       generate_unique<val_type> gu;\n \n@@ -116,10 +119,11 @@ namespace __gnu_test\n     void\n     check_assign2()\n     {\n+      using namespace std;\n       typedef _Tp cont_type;\n       typedef typename cont_type::value_type cont_val_type;\n       typedef typename CopyableValueType<cont_val_type>::value_type val_type;\n-      typedef std::vector<val_type> vector_type;\n+      typedef _GLIBCXX_STD_C::vector<val_type> vector_type;\n \n       generate_unique<val_type> gu;\n \n@@ -170,10 +174,11 @@ namespace __gnu_test\n     void\n     check_construct1()\n     {\n+      using namespace std;\n       typedef _Tp cont_type;\n       typedef typename cont_type::value_type cont_val_type;\n       typedef typename CopyableValueType<cont_val_type>::value_type val_type;\n-      typedef std::vector<val_type> vector_type;\n+      typedef _GLIBCXX_STD_C::vector<val_type> vector_type;\n \n       generate_unique<val_type> gu;\n \n@@ -193,10 +198,11 @@ namespace __gnu_test\n     void\n     check_construct2()\n     {\n+      using namespace std;\n       typedef _Tp cont_type;\n       typedef typename cont_type::value_type cont_val_type;\n       typedef typename CopyableValueType<cont_val_type>::value_type val_type;\n-      typedef std::vector<val_type> vector_type;\n+      typedef _GLIBCXX_STD_C::vector<val_type> vector_type;\n \n       generate_unique<val_type> gu;\n \n@@ -267,6 +273,13 @@ namespace __gnu_test\n     : InsertRangeHelperAux<std::list<_Tp1, _Tp2> >\n     { };\n \n+#ifdef __glibcxx_inplace_vector // C++ >= 26\n+  template<typename _Tp, size_t _Nm>\n+    struct InsertRangeHelper<std::inplace_vector<_Tp, _Nm> >\n+    : InsertRangeHelperAux<std::inplace_vector<_Tp, _Nm> >\n+    { };\n+#endif\n+\n #ifndef _GLIBCXX_DEBUG\n   template <typename _Tp1, typename _Tp2>\n     struct InsertRangeHelper<__gnu_debug::vector<_Tp1, _Tp2> >\n@@ -282,16 +295,24 @@ namespace __gnu_test\n     struct InsertRangeHelper<__gnu_debug::list<_Tp1, _Tp2> >\n     : InsertRangeHelperAux<__gnu_debug::list<_Tp1, _Tp2> >\n     { };\n+\n+# ifdef __glibcxx_inplace_vector // C++ >= 26\n+  template<typename _Tp, size_t _Nm>\n+    struct InsertRangeHelper<__gnu_debug::inplace_vector<_Tp, _Nm> >\n+    : InsertRangeHelperAux<__gnu_debug::inplace_vector<_Tp, _Nm> >\n+    { };\n+# endif\n #endif\n \n   template<typename _Tp>\n     void\n     check_insert1()\n     {\n+      using namespace std;\n       typedef _Tp cont_type;\n       typedef typename cont_type::value_type cont_val_type;\n       typedef typename CopyableValueType<cont_val_type>::value_type val_type;\n-      typedef std::vector<val_type> vector_type;\n+      typedef _GLIBCXX_STD_C::vector<val_type> vector_type;\n \n       generate_unique<val_type> gu;\n \n@@ -315,10 +336,11 @@ namespace __gnu_test\n     void\n     check_insert2()\n     {\n+      using namespace std;\n       typedef _Tp cont_type;\n       typedef typename cont_type::value_type cont_val_type;\n       typedef typename CopyableValueType<cont_val_type>::value_type val_type;\n-      typedef std::vector<val_type> vector_type;\n+      typedef _GLIBCXX_STD_C::vector<val_type> vector_type;\n \n       generate_unique<val_type> gu;\n \n@@ -369,10 +391,11 @@ namespace __gnu_test\n     void\n     check_insert4()\n     {\n+      using namespace std;\n       typedef _Tp cont_type;\n       typedef typename cont_type::value_type cont_val_type;\n       typedef typename CopyableValueType<cont_val_type>::value_type val_type;\n-      typedef std::list<val_type> list_type;\n+      typedef _GLIBCXX_STD_C::list<val_type> list_type;\n \n       generate_unique<val_type> gu;\n \n",
    "prefixes": [
        "v1",
        "1/1"
    ]
}