Jump to content

C++26

From Wikipedia, the free encyclopedia

C++26 is the informal name for the version of the International Organization for Standardization (ISO) and International Electrotechnical Commission (IEC) 14882 standard for the C++ programming language that follows C++23. The current working draft of this version is N5008.[1]

Features

[edit]

Changes that have been accepted into C++26 include:

Language

[edit]
  • Unevaluated strings.
  • Adding @, $, and ` to the basic character set.
  • constexpr cast from void*.
  • User-generated static_assert messages.
  • Placeholder variables with no name.
  • Pack indexing.
  • Attributes for structured bindings.
  • Erroneous behavior for uninitialized reads.
  • = delete("reason");
  • Variadic friends.
  • constexpr placement new.
  • Structured binding declaration as a condition.
  • Ordering of constraints involving fold expressions.
  • Deleting a pointer to an incomplete type should be ill-formed.
  • Structured bindings can introduce a pack.
  • Allowing exception throwing in constant-evaluation.
  • constexpr structured bindings and references to constexpr variables.
  • Oxford variadic comma, i.e. "Deprecate ellipsis parameters without a preceding comma. The syntax (int...) is incompatible with C, detrimental to C++, and easily replaceable with (int, ...)."[2]
  • Removing deprecated array comparisons.
  • Contracts[3]

Library

[edit]
  • Hashing support for std::chrono value classes
  • std::is_within_lifetime
  • Native handles in file streams
  • Interfacing string streams with std::string_view
  • Interfacing std::bitset with std::string_view
  • More constexpr for <cmath> and <complex>
  • Adding the new 2022 SI prefixes on ratios: std::quecto, std::ronto, std::ronna, and std::quetta
  • std::copyable_function
  • std::submdspan()
  • <contracts>: Design-by-contract support
  • <debugging>: Debugging support and language features to aid debugger programs
  • <hazard_pointer>: Hazard pointers for threading
  • <hive>: Hive data structure support which reuses erased elements' memory
  • <inplace_vector>: In-place vector data structure support, which is a resizable, fixed capacity, inplace contiguous array
  • <linalg>: A free function linear algebra interface based on the BLAS
  • <meta>: Compile-time reflection support
  • <rcu>: Support for safe reclamation read-copy-update mechanism
  • <simd>: Data-parallel access (Single instruction, multiple data or SIMD) support
  • <text_encoding>: Support for accessing the IANA Character Sets registry
  • Support for annotations to be used in reflection which behave differently from the existing attribute system used by the compiler
  • Added tuple protocol to std::complex
  • views::concat
  • Concatenation of strings and string views
  • std::ranges::generate_random
  • Printing blank lines with std::println()
  • std::formatter<std::filesystem::path>
  • Saturation arithmetic with, among others, std::add_sat, std::div_sat
[edit]

References

[edit]
  1. ^ "Working Draft, Standard for Programming Language C++" (PDF). Open Standards. ISO/IEC. 2025-03-15.
  2. ^ "P3176R1: The Oxford variadic comma". eisenwave.github.io. Retrieved 2024-12-09.
  3. ^ "Contract assertions (since C++26) - cppreference.com". en.cppreference.com. Retrieved 2025-03-09.