Skip to content

Commit ba63295

Browse files
authored
Standard 26/29 questions added to User Guide FAQ (#627)
1 parent 1b5a978 commit ba63295

1 file changed

Lines changed: 52 additions & 3 deletions

File tree

user-guide/modules/ROOT/pages/faq.adoc

Lines changed: 52 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ This section contains answers to the common questions that new developers to Boo
3535
* <<Releases>>
3636
* <<Safe C++>>
3737
* <<Smart Pointers>>
38-
* <<Standard Library>>
38+
* <<Standard C++ Library>>
3939
* <<Templates>>
4040
* <<Types>>
4141
* <<See Also>>
@@ -1811,7 +1811,7 @@ void foo() {
18111811
----
18121812

18131813

1814-
== Standard Library
1814+
== Standard C++ Library
18151815

18161816
. *Where can I find the most complete documentation on the C++ Standard Library?*
18171817
+
@@ -1838,8 +1838,57 @@ Yes, currently the functionality of two Boost libraries are being considered:
18381838

18391839
. *What is the current status of the Standard Library and when is the next release?*
18401840
+
1841-
*C++ 2026* is slated as the next full release, for details refer to https://isocpp.org/std/status[Current Status].
1841+
*C++ 2026* is slated as the next full release, for full details refer to https://isocpp.org/std/status[Current Status].
18421842

1843+
. *What are the big ticket items that should appear in the C++26 Standard Library?*
1844+
+
1845+
Here is a table of the most compelling:
1846+
+
1847+
[cols="1,3",options="header",stripes=even,frame=none]
1848+
|===
1849+
| *Feature* | *Description*
1850+
| **Contracts** | Language support for preconditions, postconditions, and assertions (`expects`, `ensures`). Major safety and correctness feature long awaited since C++20 removal.
1851+
| **Static Reflection** | Compile-time introspection of types, members, functions, attributes. Enables metaprogramming without template hacks.
1852+
| **Pattern Matching** | Functional-style `match`/`inspect` syntax for variant-like types and structured branching.
1853+
| **`std::expected` Improvements & Monadic Utilities** | Functional chaining helpers (`and_then`, `transform`, etc.) across error-handling types.
1854+
| **Senders / Receivers (`std::execution`)** | Modern async execution model replacing ad-hoc futures. Foundation for high-performance async C++.
1855+
| **`std::generator`** | Coroutine-based lazy range generator for pipelines and streaming data.
1856+
| **`std::embed` (Binary Resource Embedding)** | Embed files/resources directly into binaries at compile time. Great for games, ML, embedded, tooling.
1857+
| **Hazard Pointers / RCU** | Lock-free memory reclamation primitives for high-performance concurrency.
1858+
| **Standard Units & Quantities Library** | Type-safe physical units (meters, seconds, etc.). Prevents unit conversion bugs.
1859+
| **`std::flat_map` / `std::flat_set`** | Cache-friendly associative containers (vector-based).
1860+
| **`std::inplace_vector`** | Fixed-capacity vector with no heap allocation. Important for real-time systems.
1861+
| **Freestanding Library Expansion** | Makes C++ usable in kernels, embedded, GPUs without full runtime.
1862+
| **constexpr expansion (“constexpr everything”)** | Many standard library components now usable at compile time.
1863+
| **Improved Module Ecosystem** | Numerous refinements to make modules practical for large codebases.
1864+
| **Unicode improvements** | Better text encoding and Unicode handling across the standard library.
1865+
|===
1866+
1867+
. *What are the big ticket items that missed the C++26 Standard Library, but may appear in the 2029 release?*
1868+
+
1869+
Several initiatives are likely candidates, but need more time:
1870+
+
1871+
[cols="1,3,2",options="header",stripes=even,frame=none]
1872+
|===
1873+
| *Feature* | *Description* | *Why it missed 26*
1874+
| **Pattern Matching v2 (full algebraic matching)** | Extends the accepted pattern matching to support destructuring, guards, exhaustive checking, and more functional-style power. | Initial version was accepted, but the full vision is large and still evolving.
1875+
| **Metaclasses / Compile-time Classes** | A revolutionary feature allowing user-defined “kinds of classes” (value types, interfaces, etc.) enforced by the compiler. | Huge design space and tooling impact. Needs more experience from Reflection first. Perhaps more long-term than likely for C++29.
1876+
| **Unified Call Syntax (UFCS)** | Allows `obj.func(x)` to call free functions as if they were members. Improves discoverability and pipeline style. | Lots of bikeshedding over lookup rules and ambiguity.
1877+
| **Executor refinements & Networking TS integration** | Completing the networking library on top of Senders/Receivers. | Senders/Receivers landed late; networking integration needs time to bake.
1878+
| **Trivial Relocation** | Lets objects be safely moved with `memcpy` when possible, which should lead to a massive performance win for containers. | Deep ABI and library implications; needed more consensus.
1879+
| **`std::async_scope` and structured concurrency** | High-level lifetime management for async tasks (similar to modern languages). | Depends on ecosystem experience with Senders/Receivers first.
1880+
| **SIMD Everywhere (`std::simd` expansion)** | Making vectorization first-class and pervasive across the standard library. | Big scope and ongoing performance experimentation.
1881+
| **Language support for contracts tooling modes** | The accepted Contracts feature is the “MVP”. Advanced tooling levels and build modes are still being designed. | Needed to ship a minimal version first.
1882+
| **Compile-time Reflection v2 (code injection / metaprogramming)** | Extends reflection to allow generating new declarations. | Committee intentionally staged reflection to reduce risk.
1883+
| **Pattern-based error handling (try expressions)** | Expression-based error propagation similar to Rust. | Interaction with exceptions and `expected` still debated.
1884+
| **`std::status_code` / modern error system** | A zero-overhead alternative to exceptions and `std::error_code`. | Competes with existing mechanisms; consensus not complete.
1885+
| **Heterogeneous lookup everywhere** | Transparent hashing/comparisons across more containers and algorithms. | Lots of small but invasive library changes.
1886+
1887+
|===
1888+
1889+
. *Are there _themes_ to a release of the Standard?*
1890+
+
1891+
To an extent, pass:[C++20] was the "coroutines and ranges" release, then pass:[C++23] was a cleanup release. pass:[C++26] is shaping up to be the "Safety and Async and Metaprogramming" release. Perhaps pass:[C++29] will be the "Performance, Networking, and Compile-time Metaprogramming Superpowers" release.
18431892

18441893

18451894
== Templates

0 commit comments

Comments
 (0)