New C++ Release Released: What Has Changed
The C++ developer community has received a long-awaited language update. The new standard, which replaces C++20, introduces a number of significant changes aimed at simplifying code, improving performance, and enhancing security. In this article, we will break down the most important innovations that are already available in major compilers (GCC, Clang, MSVC).
Key Innovations
The new C++ release is not revolutionary, but it significantly refines the mechanisms laid down in previous versions. The main focus is on improving modularity, memory management, and the standard library.
- Modules — stable implementation. While modules were experimental in C++20, they are now fully production-ready. Modules allow replacing traditional header files (.h), speeding up compilation and eliminating issues with macros and include order.
- Extension of std::expected. This type, coming from Boost, is now officially part of the standard. It allows a function to return either an expected value or an error without resorting to exceptions. This makes code more predictable and performant in low-level systems.
- std::print and std::println. A long-awaited replacement for printf and std::cout. The new formatted output mechanism is fully type-safe, does not require C-style format specifiers, and works faster due to compile-time optimization.
- Improved Coroutines. Support for
std::generatorhas been added — a synchronous generator that makes it easy to create lazy sequences without writing complex boilerplate code.
Changes in the Standard Library
The Standard Library (STL) has received many small but useful additions. Developers should pay attention to the following:
- std::mdspan — a multidimensional array view without owning data. Ideal for working with matrices, images, and scientific computations.
- std::flat_map and std::flat_set — containers implemented on top of a sorted vector. They consume less memory than std::map and are faster for iteration.
- std::stacktrace — built-in support for obtaining stack traces. No need to link external libraries for error diagnostics in production.
- Improved string handling: new methods for working with UTF-8 and support for compile-time constant strings.
Performance and Security Improvements
The new standard continues the trend toward safe memory management. The [[indeterminate]] attribute has been introduced, which warns the compiler that a variable may be uninitialized — this helps catch potential bugs at build time.
Support for Concepts has also been improved. They now work faster, and compilation errors have become more readable. Developers can write stricter constraints for templates without sacrificing the performance of the resulting code.
What Does This Mean for Developers?
If you write in C++ and use modern compilers (GCC 14+, Clang 18+, MSVC 2024+), you can already start adopting the new features. We especially recommend paying attention to std::print (it noticeably speeds up log output) and std::expected (simplifies error handling