c++26 · iso/iec 14882:2026 (draft)
Формальная ратификация ожидается в 2026 году, но набор фич уже в основном заморожен (feature freeze прошёл на встрече комитета). Крупнейшие добавления — static reflection (язык) и std::execution (библиотека), плюс доводка concurrency (hazard_pointer, rcu) и синтаксический сахар. 14 фич, каждая — отдельная страница.Formal ratification is expected in 2026, but the feature set is mostly frozen already (feature freeze passed at a committee meeting). The largest additions are static reflection (language) and std::execution (library), plus concurrency polish (hazard_pointer, rcu) and syntactic sugar. 14 features, each its own page.
Senders/receivers (P2300) — универсальная модель асинхронных вычислений, преемник futures/executors из TS.Senders/receivers (P2300) — a universal model of asynchronous computation, the successor to the futures/executors from the TS.
Безопасное освобождение памяти в lock-free структурах данных без сборщика мусора.Safe memory reclamation in lock-free data structures with no garbage collector.
Read-Copy-Update — механизм для сценариев с частым чтением и редкой записью, знакомый по ядру Linux.Read-Copy-Update — a mechanism for read-heavy, write-rare scenarios, familiar from the Linux kernel.
Портируемая векторизация — единый тип для использования SIMD-инструкций процессора без intrinsics под #ifdef.Portable vectorization — a unified type for using the CPU's SIMD instructions with no intrinsics under #ifdef.
BLAS-подобные операции линейной алгебры поверх mdspan — часть стандартной библиотеки, а не сторонняя зависимость.BLAS-like linear algebra operations built on mdspan — part of the standard library, not a third-party dependency.
pre/post/contract_assert — предусловия и постусловия функций как часть синтаксиса языка, а не комментарий или assert().pre/post/contract_assert — function pre- and postconditions as part of the language syntax, not a comment or an assert().
_ как имя для намеренно неиспользуемой переменной — можно объявить несколько раз в одной области видимости._ as a name for an intentionally unused variable — can be declared multiple times in the same scope.
auto [first, ...rest] = tuple — захват "остатка" элементов пакетом вместо явного перечисления каждого.auto [first, ...rest] = tuple — capturing the "remaining" elements as a pack instead of naming each one.
friend для целого параметр-пакета типов одной декларацией вместо ручного дублирования на каждый тип.friend for an entire type parameter pack in one declaration instead of manual duplication per type.
Текстовое пояснение прямо в объявлении удалённой функции — попадает в текст ошибки компилятора.A textual explanation right in the deleted function's declaration — surfaces in the compiler's error text.
Pack...[N] — доступ к N-му элементу параметр-пакета напрямую, без вспомогательных шаблонов вроде tuple_element.Pack...[N] — direct access to the Nth element of a parameter pack, no helper templates like tuple_element needed.
Чтение неинициализированной переменной перестаёт быть UB — становится определённым, но ошибочным поведением с диагностируемым значением.Reading an uninitialized variable stops being UB — it becomes defined-but-erroneous behavior with a diagnosable value.
Программная точка останова и проверка "запущено ли под отладчиком" — стандартная замена platform-specific intrinsics.A programmatic breakpoint and an "is a debugger attached" check — a standard replacement for platform-specific intrinsics.
порядок чтения и связи с предыдущими стандартамиreading order and links to earlier standards
std::execution стоит читать после освоения корутин (cpp20/coroutines.html) и jthread/stop_token (cpp20/jthread-stop-token.html) — senders/receivers во многом заменяют собой ручную композицию асинхронных операций, которую раньше приходилось строить поверх этих примитивов. hazard_pointer и rcu логично читать вместе — оба решают задачу безопасного освобождения памяти в конкурентных структурах данных, но разными путями, и в cpp_concurrency.md уже есть их предварительное сравнение.std::execution is worth reading after mastering coroutines (cpp20/coroutines.html) and jthread/stop_token (cpp20/jthread-stop-token.html) — senders/receivers largely replace the manual composition of asynchronous operations that previously had to be built on top of those primitives. hazard_pointer and rcu are naturally read together — both solve safe memory reclamation in concurrent data structures, but via different paths, and cpp_concurrency.md already has a preliminary comparison of the two.
std::linalg логично читать после std::mdspan из C++23 (cpp23/mdspan.html) — linalg целиком построен поверх mdspan как представления матриц и векторов. Reflection стоит читать в самом начале раздела — многие последующие фичи (contracts, structured bindings pack) концептуально с ней не связаны, но само по себе это самое объёмное и медленно усваиваемое нововведение стандарта.std::linalg is naturally read after C++23's std::mdspan (cpp23/mdspan.html) — linalg is built entirely on top of mdspan as its representation of matrices and vectors. Reflection is worth reading first in this section — many of the later features (contracts, structured bindings pack) aren't conceptually related to it, but it is, on its own, the standard's most substantial and slowest-to-absorb addition.