Technology
C++26 standard introduces library hardening to convert precondition violations into program terminations
The upcoming C++26 standard establishes hardened preconditions to prevent common memory safety violations from triggering undefined behavior.
The short version
- C++26 is introducing the concept of a hardened standard library implementation that turns specific precondition violations into terminating crashes instead of silent undefined behavior.
- Hardened checks target low-overhead, constant-time memory safety conditions, covering operations across containers, iterators, strings, smart pointers, and numeric arrays.
- Major compiler and library vendors are aligning their implementations, using distinct flags like GCC's _GLIBCXX_ASSERTIONS, Clang's libc++ modes, and MSVC STL's _MSVC_STL_HARDENING.
Key facts
- The C++26 standard introduces hardened preconditions, transforming certain precondition violations into contract violations that terminate execution rather than allowing undefined behavior.[Hacker News]
- Targeted operations for hardening include sequence containers, container views, iterator adaptors, strings, smart pointers, stacktrace, and numeric arrays.[Hacker News]
- Proposals P3471, P3697, and P3878 mandate terminating semantics for hardened precondition violations to prevent code execution from continuing into undefined behavior.[Hacker News]
- Vendors implement hardening through custom switches, such as _GLIBCXX_ASSERTIONS in GCC libstdc++, FAST/EXTENSIVE/DEBUG modes in Clang libc++, and _MSVC_STL_HARDENING in MSVC.[Hacker News]
What remains uncertain
- Compiler and standard library vendors are still actively completing and aligning their implementation details for contracts and library hardening ahead of the full C++26 specification release.[Hacker News]