{"id":2229926,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2229926/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/patch/95c4cf6c-9e9f-47b3-8a93-5e5fefdf9d04@cantrip.org/","project":{"id":17,"url":"http://patchwork.ozlabs.org/api/1.1/projects/17/?format=json","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},"msgid":"<95c4cf6c-9e9f-47b3-8a93-5e5fefdf9d04@cantrip.org>","date":"2026-04-28T22:19:09","name":"Changes to gcc-16/porting_to","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"e0605796f4e5809e088ab93d1e22eef042c32ee4","submitter":{"id":90892,"url":"http://patchwork.ozlabs.org/api/1.1/people/90892/?format=json","name":"Nathan Myers","email":"ncm@cantrip.org"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/gcc/patch/95c4cf6c-9e9f-47b3-8a93-5e5fefdf9d04@cantrip.org/mbox/","series":[{"id":501941,"url":"http://patchwork.ozlabs.org/api/1.1/series/501941/?format=json","web_url":"http://patchwork.ozlabs.org/project/gcc/list/?series=501941","date":"2026-04-28T22:19:09","name":"Changes to gcc-16/porting_to","version":1,"mbox":"http://patchwork.ozlabs.org/series/501941/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2229926/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2229926/checks/","tags":{},"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 (2048-bit key;\n unprotected) header.d=cantrip.org header.i=@cantrip.org header.a=rsa-sha256\n header.s=dreamhost header.b=h9FBBZKA;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=gcc.gnu.org\n (client-ip=38.145.34.32; helo=vm01.sourceware.org;\n envelope-from=gcc-patches-bounces~incoming=patchwork.ozlabs.org@gcc.gnu.org;\n receiver=patchwork.ozlabs.org)","sourceware.org;\n\tdkim=pass (2048-bit key,\n unprotected) header.d=cantrip.org header.i=@cantrip.org header.a=rsa-sha256\n header.s=dreamhost header.b=h9FBBZKA","sourceware.org;\n dmarc=none (p=none dis=none) header.from=cantrip.org","sourceware.org; spf=pass smtp.mailfrom=cantrip.org","server2.sourceware.org;\n arc=pass smtp.remote-ip=23.83.209.51"],"Received":["from vm01.sourceware.org (vm01.sourceware.org [38.145.34.32])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g4vyC0k4jz1xvV\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 29 Apr 2026 08:19:57 +1000 (AEST)","from vm01.sourceware.org (localhost [127.0.0.1])\n\tby sourceware.org (Postfix) with ESMTP id 820DC4BBC0DC\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 28 Apr 2026 22:19:55 +0000 (GMT)","from dragonfly.birch.relay.mailchannels.net\n (dragonfly.birch.relay.mailchannels.net [23.83.209.51])\n by sourceware.org (Postfix) with ESMTPS id 05FB84BB8F48;\n Tue, 28 Apr 2026 22:19:14 +0000 (GMT)","from relay.mailchannels.net (localhost [127.0.0.1])\n by relay.mailchannels.net (Postfix) with ESMTP id 7B0437A1FD5;\n Tue, 28 Apr 2026 22:19:13 +0000 (UTC)","from pdx1-sub0-mail-a240.dreamhost.com\n (100-97-140-132.trex-nlb.outbound.svc.cluster.local [100.97.140.132])\n (Authenticated sender: dreamhost)\n by relay.mailchannels.net (Postfix) with ESMTPA id 4C7DB7A1E8E;\n Tue, 28 Apr 2026 22:19:12 +0000 (UTC)","from pdx1-sub0-mail-a240.dreamhost.com (pop.dreamhost.com\n [64.90.62.162]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384)\n by 100.97.140.132 (trex/7.1.5); Tue, 28 Apr 2026 22:19:13 +0000","from [10.137.0.15] (unknown [65.192.71.68])\n (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)\n key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest\n SHA256)\n (No client certificate requested)\n (Authenticated sender: ncm@cantrip.org)\n by pdx1-sub0-mail-a240.dreamhost.com (Postfix) with ESMTPSA id\n 4g4vwv5pYtzyr9;\n Tue, 28 Apr 2026 15:19:11 -0700 (PDT)"],"DKIM-Filter":["OpenDKIM Filter v2.11.0 sourceware.org 820DC4BBC0DC","OpenDKIM Filter v2.11.0 sourceware.org 05FB84BB8F48"],"DMARC-Filter":"OpenDMARC Filter v1.4.2 sourceware.org 05FB84BB8F48","ARC-Filter":"OpenARC Filter v1.0.0 sourceware.org 05FB84BB8F48","ARC-Seal":["i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1777414755; cv=pass;\n b=ndHBpMIPjosS98ngMs98DAul3Fl6WgznY4bcZEu8qj9sBrM7xwHG0dOdh7xQKkrWZLkfqgO0c6aziwUPAqryutx//msTaiNIXtXeD2M57E2fNMzSoR0AfDVa6pGKHze7AfSkHPuOiIZlvfcBEVgZzKS8CKR5UQkdb7x2bLf+SSI=","i=1; a=rsa-sha256; d=mailchannels.net; s=arc-2022; cv=none;\n t=1777414752;\n b=KyJwxQM1lr5WAD1rMJr4/WvJTQn9Ni6qAgcfE0mneDz6YqVvwxJdtUfVt0FSXUJub5sONR\n q9vhHGlTUHRNKTLxxqdX2xj9XAk3fFiYfzxckP+Mg01+/ZuwqKmmSr8tWogen1jUxv29ja\n mNnQezy8utXZLiATXp4ggpNCpes0PeUJNuV2wnjo/SmV3ZDz7bt00GI3ZSrKYPzw64DM9i\n zIxgCjPI9A4il1Egfj4U1QFTuHSLZkk3jNUxdMhaDn2/PgPfR0EX7MHOc5VdyPQyio2LVU\n B6O7vX/EsJ9qKyyRSOsoeGhZ20QTfQEOdpNrB++gJccnSlc1yuhPvu7dCV9MUA=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=sourceware.org; s=key;\n t=1777414755; c=relaxed/simple;\n bh=v0feG7L8Xwq7SfbkdMxBk9LnbvKWr93h+GObS9Vcqig=;\n h=DKIM-Signature:Message-ID:Date:MIME-Version:To:From:Subject;\n b=fIgc7kFHigaLcuCy0alfiaLVr5TBMpDMHISHz93bTIJDdrhhzmxkKT/oOCJwni+l2IWiqS3phLjJn4DEqIEGIU3MnTJHX5XWQB7Zvb1CW3+8svBDG2XQLakHS3pkpH8w4OMsuyOfoz7LJw3uJQfPw/Ho1iaOcfBCm/plAxriPj0=","i=1; a=rsa-sha256; c=relaxed/relaxed;\n d=mailchannels.net; s=arc-2022; t=1777414752;\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 dkim-signature; bh=/cHl5nMH9f3xNeKuOmg0V/qJ1zSlkW61Mtft+kRq6iE=;\n b=Ubob3fcvT6bF7qeoKlyQbMSFkO+/O/mcPhTwwyz9KQzUzNkFshUCv9vJQmxBsjFKbGPZB1\n nf3UV0FRhFsuOFtCNg1VQOfKHueAcaKIPw67Fq658fQo2yvAX+M2iTdR8STnRPZK3iyBqD\n uXM9b1Cauf6DDmqyHbGsqMBPgrpznElwCTP2wOc9hTbNsiX3hUy3cO661+trd82QNytNiE\n JLpslGICsHly9f27ax3mki8jwaKVmru/WxOv1RLK1T4xdssb70YHEFxTGkh/SG5ywC2fqz\n 2r1mtiarf+VAG2rTcNd/+roF2E0ph7o4Gw63fhzT+CI+RoOSG5qSlzd1P+nHmA=="],"ARC-Authentication-Results":["i=2; server2.sourceware.org","i=1; rspamd-55bb47d7db-b8ldg;\n auth=pass smtp.auth=dreamhost smtp.mailfrom=ncm@cantrip.org"],"X-Sender-Id":["dreamhost|x-authsender|ncm@cantrip.org","dreamhost|x-authsender|ncm@cantrip.org"],"X-MC-Relay":"Neutral","X-MailChannels-SenderId":"dreamhost|x-authsender|ncm@cantrip.org","X-MailChannels-Auth-Id":"dreamhost","X-Drop-Scare":"251f279a7d735610_1777414753378_1758034172","X-MC-Loop-Signature":"1777414753378:1561039274","X-MC-Ingress-Time":"1777414753377","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=cantrip.org;\n s=dreamhost; t=1777414752;\n bh=/cHl5nMH9f3xNeKuOmg0V/qJ1zSlkW61Mtft+kRq6iE=;\n h=Content-Type:Date:To:From:Subject;\n b=h9FBBZKAUL7ZBAWD8xgAlQ18iw5ypYsVRP4OwM9EQ5AmXIC7uFZunA1qClF7nQuab\n HO35tut7FarFNCGXENzrR/KCgHvpHTXdveBw/IERaF98+S955RbF+i2KD/p+rwurtz\n fs8o+kMYSfVmp3uPzkoIbqimNW+gUAo+m7wh5WiTuolx8gG30ifIGoCzPX9nPjtSRy\n LhYVmjAnGE2EBZlIwQBHWoX2ydPp/FMMNHmINNbUVWG4R/fTKlD09FMd8n5tncyA+8\n zUkcyL507Lr3AuR9V3KL9JLxuSHSNn8SICVzkBFKGwlt2SHqjkbuoxOtzw9+Z9mIKG\n h+WWeos52ba9A==","Content-Type":"multipart/mixed; boundary=\"------------0VH8ZEerPfJjBxEUB0X0uW02\"","Message-ID":"<95c4cf6c-9e9f-47b3-8a93-5e5fefdf9d04@cantrip.org>","Date":"Tue, 28 Apr 2026 18:19:09 -0400","MIME-Version":"1.0","User-Agent":"Mozilla Thunderbird","To":"gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org","Content-Language":"en-US","From":"Nathan Myers <ncm@cantrip.org>","Subject":"[PATCH] Changes to gcc-16/porting_to","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":"gcc-wwwdocs/Changelog:\n\n\t* htdocs/gcc-16/porting_to.html: Numerous edits.\n\n---\n\n      - Demote \"C and C++\" build errors to <h4>, matching C++\n      - Promote 'uninitialized-variable', 'missing-header-includes'\n       common build failures from C++ to \"C and C++'.\n      - Clarify comments on unused-but-set increment examples, and\n       note that just silencing the warning is not necessarily the\n       right action.\n      - Add 'capture-this-deprecated' build failure in C++.\n       (From package builds, it showed up only in jemalloc.)\n      - Mention autoconf-2.73 change to AC_PROG_CXX under\n       'wrong-standard', and suggest upgrading autoconf or removing\n       AC_PROG_CXX.\n      - Note that names removed from C++20 may still be seen in GCC-16\n       headers when building with -std=c++20.\n      - Note the -std=c++17 alternative to immediately renaming all\n       'concept' and 'requires' identifiers.\n      - Change 'error:' to 'warning:' in sample diagnostics for uses\n       where the default is only a warning.\n      - Indent example diagnostic messages.\n      - Eliminate the 'specified bound 18446744073709551608' build\n       failure example as too obscure. (It only showed up in jemalloc\n       builds.)\n      - Trivial wording improvements.\n\n(patch attached, page as patched may be viewed at\n<http://cantrip.org/porting_to.html>.)","diff":"diff --git a/htdocs/gcc-16/porting_to.html b/htdocs/gcc-16/porting_to.html\nindex 2ab0df6f..3011261f 100644\n--- a/htdocs/gcc-16/porting_to.html\n+++ b/htdocs/gcc-16/porting_to.html\n@@ -21,12 +21,18 @@ facilitate compilation or run-time performance.\n <p>\n Some of these changes are user visible and can cause grief when\n porting to GCC 16. This document is an effort to identify common issues\n-and provide solutions. Let us know if you have suggestions for improvements!\n+and suggest solutions. Let us know if you have suggestions for improvements!\n </p>\n \n-<h2 id=\"c-cpp\">Common C and C++ language issues</h2>\n+<h2 id=\"c-cpp\">C and C++ language issues</h2>\n \n-<h3 id=\"changes-to-wunused\">Changes to -Wunused-but-set-* warnings</h3>\n+<h3 id=\"c-c++-common-failures\">Common C and C++ build failures</h3>\n+<p>\n+Failures encountered when using Gcc-16 to rebuild numerous open-source\n+C and C++ packages included the following:\n+</p>\n+\n+<h4 id=\"changes-to-wunused\">Changes to -Wunused-but-set-* warnings</h4>\n \n <!-- introduced in 0eac9cfee8cb0b21de866a04d5d59685ab35208f -->\n \n@@ -59,10 +65,10 @@ void foo (void) {\n   int f = 0; // No warning, f used\n   int g = f = 5;\n   (void) g;\n-  int h = 0; // No warning, preincrement used\n+  int h = 0; // No warning, preincrement result used\n   int i = ++h;\n   (void) i;\n-  int j = 0; // No warning, postdecrement used\n+  int j = 0; // No warning, postdecrement result used\n   int k = j--;\n   (void) k;\n   int l = 0; // No warning, l used\n@@ -75,20 +81,49 @@ void foo (void) {\n In order to avoid the warnings, one can either remove newly diagnosed\n variables or parameters which aren't used except in pre/post inc/decrements\n or compound assignments, make them used in some way, e.g. just\n-casting to <code>(void)</code>, or lowering the level of the warning.  See\n+casting to <code>(void)</code>, or lowering the level of the warning.\n+But note that an unused variable may indicate a coding error, where\n+some other object was mistakenly used in its place, or a larger change\n+was begun but left incomplete.\n+See\n <a href=\"https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#index-Wunused-but-set-variable_003d\">\n <code>-Wunused-but-set-*</code></a> documentation for more details.\n </p>\n \n+<h4 id=\"uninitialized-variable\">Uninitialized-variable warnings</h4>\n+\n+<p>\n+The compiler has similarly become better at identifying and warning about\n+cases where a variable may be getting used without initialization, resulting\n+in undefined behavior, and messages like:\n+</p><p><code>&nbsp;warning: ‘buffer’ may be used uninitialized\n+</code></p><p>These can often be fixed just by initializing the variable\n+to a default value, but they might indicate a deeper problem that such a\n+change would only mask.\n+</p>\n+\n+<h4 id=\"missing-header-includes\">Missing header includes</h4>\n+\n+<p>\n+Programs sometimes use names without having properly #included the header\n+that declares them, relying instead on the name having being declared\n+incidentally via some other header; until it no longer does, resulting in\n+errors like:\n+</p><p><code>&nbsp;error: ‘uint64_t’ was not declared in this scope</code><br>\n+</p><p>These are fixed by identifying which header declares the name, and\n+including that. The compiler may suggest the header to include.\n+</p>\n+\n+\n <h2 id=\"cpp\">C++ language issues</h2>\n \n <p>\n-Note that all GCC releases make <a href=\"https://gcc.gnu.org/bugs/#upgrading\"\n+All GCC releases make <a href=\"https://gcc.gnu.org/bugs/#upgrading\"\n >improvements to conformance</a> which may reject non-conforming, legacy\n codebases.\n Other issues arise from C++20 becoming the default choice of published\n Standard to follow (as might have been overridden with, e.g.,\n-<code>-std=c++20</code>), and changes in C++20 from previous Standards.\n+'<code>-std=c++20</code>)', and changes in C++20 from previous Standards.\n </p>\n \n <h3 id=\"removed-features\">Deprecated features removed in C++20</h3>\n@@ -99,43 +134,52 @@ been deprecated have been removed from the Standard. These are\n summarized at the top of\n <a href=\"https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p2131r0.html\"\n >Changes between C++17 and C++20 DIS [\"Draft International Standard\"]</a>.\n+Note that names removed from C++20 may still appear in headers when\n+building under '<code>-std=c++20</code>', and only provoke 'deprecated'\n+warnings.\n </p>\n \n-<h3 id=\"c++-common-failures\">Common build failures</h3>\n+<h3 id=\"c++-common-failures\">Common C++ build failures</h3>\n <p>\n Failures encountered when using Gcc-16 to rebuild numerous open-source\n-packages included the following:\n+C++ packages included the following:\n </p>\n \n-<h4 id=\"wrong-standard\">Library uses features from a newer Standard</h4>\n+<h4 id=\"wrong-standard\">Program uses features from a newer Standard</h4>\n \n <p>\n-Many failures are caused by using a build option like '<code>-std=c++11</code>\n-where the code turns out to depend on features from a later Standard, such as when\n-building with a new version of a library that has begun using such features.\n-</p><code>error: 'make_unique' is not a member of 'std'</code>\n-</p>Just removing that option from the command line may suffice, although\n-you might then need to update other code reliant on features that have\n-been removed from the later Standard.</p>\n+Many failures are caused by using a build option like '<code>-std=c++11</code>'\n+where the code turns out to depend on features from a later Standard:\n+</p><p><code>&nbsp;error: 'make_unique' is not a member of 'std'</code>\n+</p><p>Just removing that option from the command line may suffice,\n+as GCC-16 now defaults to providing C++20. Note that <code>autoconf</code>\n+prior to release 2.73, if told '<code>AC_PROG_CXX</code>' (meaning, verify the\n+compiler supports C++11 features), upon checking GCC-16 incorrectly\n+concludes it must add '<code>-std=gnu++11</code>' to the makefile.\n+You can upgrade <code>autoconf</code>, or simply remove\n+'<code>AC_PROG_CXX</code>' from the program's <code>configure.ac</code> file,\n+and then reconstruct your project build scripts.\n \n <h4 id=\"expected-identifier-before\">Expected identifier before</h4>\n \n <p>\n C++20 defines new keywords such as '<code>concept</code>' and '<code>requires</code>',\n which can no longer be used as identifiers:\n-</p><p><code> error: expected identifier before ‘concept’\n-</code></p><p>The only solution is to change the name of the identifier.\n+</p><p><code>&nbsp;error: expected identifier before ‘concept’\n+</code></p><p>The only solutions are to change the name of the identifier,\n+or build to an older standard, like '<code>-std=c++17</code>'.\n </p>\n \n-<h4 id=\"uninitialized-variable\">Uninitialized-variable warnings</h4>\n+<h4 id=\"capture-this\">Implicit lambda capture of '<code>this</code>'</h4>\n \n <p>\n-The compiler is now better at identifying and warning about cases\n-where a variable may be getting used without initialization, resulting\n-in undefined behavior, and errors like:\n-</p><p><code> error: ‘buffer’ may be used uninitialized [-Werror=maybe-uninitialized]\n-</code></p><p>These can often be fixed by just initializing the variable to a default\n-value, but they may indicate a deeper problem that this would only mask.\n+C++-20 deprecates implicitly capturing the value of the meta-variable\n+'<code>this</code>' in saved lambda state, provoking warnings if member\n+names from the surrounding context are used in the lambda body:\n+</p><p><code>&nbsp;warning: implicit capture of ‘this’ via ‘[=]’ is deprecated in C++20</code>\n+</p><p>\n+These can be resolved by adding '<code>this</code>' or '<code>*this</code>',\n+as appropriate, to the capture list, such as by '<code>[=,this]</code>'.\n </p>\n \n <h4 id=\"changes-to-str-literals\">Changes to character literals</h4>\n@@ -143,7 +187,7 @@ value, but they may indicate a deeper problem that this would only mask.\n <p>\n In C++20, <code>u8\"str\"</code> and <code>u8'c'</code> literals changed\n from type char to type char8_t, leading to errors like:\n-</p><p><code>  error: invalid conversion from 'const char8_t*' to 'const char*' [-fpermissive]\n+</p><p><code>&nbsp;error: invalid conversion from 'const char8_t*' to 'const char*' [-fpermissive]\n </code></p><p> The fix is most commonly a cast from the u8 literal to plain <code>char</code>\n or <code>char const*</code>.\n </p>\n@@ -155,7 +199,7 @@ In C++20, the <code>operator&gt;&gt;</code> overload for reading from an\n <code>istream</code> into a <code>char*</code> was removed because it\n offers no way to prevent buffer overrun when reading into a buffer of\n unspecified size. This results in errors like:\n-</p><p><code> error: no match for ‘operator&gt;&gt;’ (operand types are ‘std::istream’ {aka ‘std::basic_istream&lt;char&gt;’} and ‘char*’)\n+</p><p><code>&nbsp;error: no match for ‘operator&gt;&gt;’ (operand types are ‘std::istream’ {aka ‘std::basic_istream&lt;char&gt;’} and ‘char*’)\n </code></p><p>\n A fix is to read into a native array, which uses the bound to prevent\n overrun and leaves any extra characters unread, or to read into an\n@@ -171,7 +215,7 @@ cause ambiguities if the type also defines its own <code>operator!=</code>\n with an unconventional signature, such as only supporting comparisons\n of non-const types (often a mistake, because comparison typically does\n not require altering its arguments). This provokes errors like:\n-</p><p><code> error: ambiguous overload for ‘operator!=’ (operand types are ‘daeStringRef’ and ‘long int’)\n+</p><p><code>&nbsp;error: ambiguous overload for ‘operator!=’ (operand types are ‘daeStringRef’ and ‘long int’)\n </code></p><p>Fixing argument-type signatures is often the simplest fix, but more\n complicated cases may require adding or removing overloads.\n </p>\n@@ -179,8 +223,8 @@ complicated cases may require adding or removing overloads.\n <h4 id=\"no-member-destroy\">Has no member named <code>destroy</code></h4>\n \n <p>\n-In C++20, some of what had been deprecated member functions and member\n-typedefs of <code>std::allocator</code> were removed, moving them into\n+In C++20, many deprecated member functions and member typedefs of\n+<code>std::allocator</code> were removed, moving them into\n <code>std::allocator_traits</code>, causing complaints about\n lack of these names:\n <code>pointer</code>,\n@@ -195,23 +239,8 @@ lack of these names:\n </p>\n \n <p>\n-The solution in most cases is to use the corresponding member of\n-<code>std::allocator_traits</code> as instantiated on the allocator\n-type, instead. Note that explicitly specializing\n-<code>std::allocator_traits</code> on a custom allocator type, though\n-now undefined behavior, is not warned about.\n-</p>\n-\n-<h4 id=\"missing-header-includes\">Missing header includes</h4>\n-\n-<p>\n-Programs sometimes use names without having properly #included the header\n-that declares them, relying instead on the name having being declared\n-accidently via some other header; until it no longer does, resulting in\n-errors like:\n-</p><p><code> error: ‘uint64_t’ was not declared in this scope</code><br>\n-</p><p>Determine the correct header that declares the name, and <code>#include</code>\n-it. The compiler may suggest a header to include.\n+The solution is to use the corresponding member of <code>std::allocator_traits</code>\n+as instantiated on the allocator type, instead.\n </p>\n \n <h4 id=\"obsolete-function-objects\"><code>unary_function</code> is not defined</h4>\n@@ -242,17 +271,10 @@ All of\n <code>unary_negate</code>,\n <code>binary_negate</code>,\n <code>not1</code>, and <code>not2</code>\n-have been deprecated and then eliminated from C++20 or earlier Standards,\n+have been deprecated in earlier Standards and then eliminated from C++20,\n supplanted by (a much smaller number of) modern alternatives found in\n-<code>&lt;functional&gt;</code>.\n-</p>\n-\n-<h4 id=\"specified-bound-overflow\">specified bound 18446744073709551608 exceeds maximum</h4>\n-\n-<p>\n-GCC has become better at recognizing when a value passed to an allocator could potentially\n-exceed the maximum permitted, 0x7ff...ff, such as by rounding a passed-in size up to the\n-usual alignment without capping the result.\n+<code>&lt;functional&gt;</code>. GCC-16 thus far only deprecates these names,\n+but does not actually remove them.\n </p>\n \n <h2 id=\"os\">Operating Systems</h2>\n","prefixes":[]}