This page is a "brief" summary of some of the huge number of improvements in GCC 16.
Note: GCC 16 has not been released yet, so this document is a work-in-progress.
See the GNU Offloading and Multi-Processing Project (GOMP) page for general information.
begin declare variant directive for C
and C++ is now supported.omp_target_memset and
omp_target_memset_async API routines have been
added.See the GCC OpenACC wiki page for general information.
acc_memcpy_device and acc_memcpy_device_async
API routines have been added for C, C++ and Fortran.wait directive now accepts the
if clause.
acc_attach and
acc_detach now augment their OpenACC 2.6 C/C++ counterparts.
PARAMETER) used as
var in data clauses are now permitted by the specification and
GCC for better compatibility with existing code; however, with GCC,
specifying them in data clauses affects neither compile-time nor runtime
behavior.std::is_integral<__int128> and similar
traits are always true. Previously this was only the case when compiling
with GNU dialects (-std=gnu++17, -std=gnu++14,
etc.) and not with strict dialects (-std=c++17, etc.)
std::chrono::current_zone() on Windows
(thanks to Björn Schäpers).
<atomic> and
semaphore types in <semaphore>.
Synchronization for <syncstream>.
std::format args and
std::formatter specializations.
std::partial_ordering type in
<compare>.
std::variant with std::jthread,
std::stop_token, and std::stop_source
alternatives.
<ranges>.
std::mdspan, thanks to Luc Grosheintz.ranges::starts_with and ranges::ends_with.
std::inplace_vector.std::copyable_function and std::function_ref.
std::indirect and std::polymorphic.std::owner_equal for shared pointers, thanks to Paul Keir.
<debugging> header and contents.std::stringstream and std::bitset
member functions accepting std::string_view arguments,
thanks to Nathan Myers.
std::dims,
thanks to Luc Grosheintz.
TEAM feature.IMPORT
statement and the new GENERIC statement.sinpi intrinsic).split intrinsic subroutine is now
supported and c_f_pointer now accepts an optional
lower bound as a argument.-fexternal-blas64 option has been added to call
external BLAS routines with 64-bit integer arguments for
MATMUL. This option is only valid for
64-bit systems and when -ffrontend-optimize is
in effect.--enable-x86-64-mfentry configure option
enables -mfentry which uses __fentry__,
instead of mcount for profiling on x86-64. This
option is enabled by default for glibc targets.
--enable-tls=DIALECT is now supported to control the
default TLS dialect. The default remains gnu.
The accepted values are gnu and gnu2 (for
TLS descriptors).
gfx942) devices
has been added, including the generic gfx9-4-generic and
mostly compatible gfx950.gfx908,
gfx90a, gfx9-generic,
gfx9-4-generic, gfx10-3-generic, and
gfx11-generic. Multilibs for specific devices are no longer
built by default if a generic arch exists. Note:
_BitInt (N) and
unsigned _BitInt (N)) are supported, now.
-mstack-protector-guard=global. Option
-mstack-protector-guard-record was added, too. The primary
use is for the Linux kernel in order to support run-time patching of the
address loading of the canary.
Copyright (C) Free Software Foundation, Inc. Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.
These pages are maintained by the GCC team. Last modified 2025-11-28.