From 68a163249d2fb56c5829646c59f5ecb79f741071 Mon Sep 17 00:00:00 2001 From: Jonathan Wakely Date: Mon, 23 Jun 2025 17:10:01 +0100 Subject: [PATCH] P3697R1 Minor additions to C++26 standard library hardening --- source/diagnostics.tex | 4 ++-- source/iterators.tex | 52 +++++++++++++++++++++--------------------- source/memory.tex | 7 ++++-- source/ranges.tex | 4 ++-- source/support.tex | 5 ++++ 5 files changed, 40 insertions(+), 32 deletions(-) diff --git a/source/diagnostics.tex b/source/diagnostics.tex index 3c4b0c9800..d16f516a77 100644 --- a/source/diagnostics.tex +++ b/source/diagnostics.tex @@ -2034,7 +2034,7 @@ Let \tcode{n} be \tcode{t.size()}. \pnum -\expects +\hardexpects \tcode{skip <= skip + max_depth} is \tcode{true}. \pnum @@ -2213,7 +2213,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{frame_no < size()} is \tcode{true}. \pnum diff --git a/source/iterators.tex b/source/iterators.tex index 7423730269..eacaab41d9 100644 --- a/source/iterators.tex +++ b/source/iterators.tex @@ -5580,7 +5580,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{x.v_.valueless_by_exception()} is \tcode{false}. \pnum @@ -5600,7 +5600,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{x.v_.valueless_by_exception()} is \tcode{false}. \pnum @@ -5630,7 +5630,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{holds_alternative(v_)} is \tcode{true}. \pnum @@ -5655,7 +5655,7 @@ \end{codeblock} \pnum -\expects +\hardexpects \tcode{holds_alternative(v_)} is \tcode{true}. \pnum @@ -5700,7 +5700,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{holds_alternative(v_)} is \tcode{true}. \pnum @@ -5719,7 +5719,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{holds_alternative(v_)} is \tcode{true}. \pnum @@ -5774,7 +5774,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{x.v_.valueless_by_exception()} and \tcode{y.v_.valueless_by_exception()} are each \tcode{false}. @@ -5795,7 +5795,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{x.v_.valueless_by_exception()} and \tcode{y.v_.valueless_by_exception()} are each \tcode{false}. @@ -5816,7 +5816,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{x.v_.valueless_by_exception()} and \tcode{y.v_.valueless_by_exception()} are each \tcode{false}. @@ -5838,7 +5838,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{holds_alternative(i.v_)} is \tcode{true}. \pnum @@ -5855,7 +5855,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{holds_alternative(x.v_)} and \tcode{holds_alternative(y.v_)} are each \tcode{true}. @@ -6020,8 +6020,8 @@ \begin{itemdescr} \pnum -\expects -\tcode{n >= 0}. +\hardexpects +\tcode{n >= 0} is \tcode{true}. \pnum \effects @@ -6107,7 +6107,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{length > 0} is \tcode{true}. \pnum @@ -6135,8 +6135,8 @@ \begin{itemdescr} \pnum -\expects -\tcode{n < length}. +\hardexpects +\tcode{n < length} is \tcode{true}. \pnum \effects @@ -6152,8 +6152,8 @@ \begin{itemdescr} \pnum -\expects -\tcode{length > 0}. +\hardexpects +\tcode{length > 0} is \tcode{true}. \pnum \effects @@ -6172,8 +6172,8 @@ \begin{itemdescr} \pnum -\expects -\tcode{length > 0}. +\hardexpects +\tcode{length > 0} is \tcode{true}. \pnum \effects @@ -6269,8 +6269,8 @@ \begin{itemdescr} \pnum -\expects -\tcode{n <= length}. +\hardexpects +\tcode{n <= length} is \tcode{true}. \pnum \effects @@ -6345,8 +6345,8 @@ \begin{itemdescr} \pnum -\expects -\tcode{-n <= length}. +\hardexpects +\tcode{-n <= length} is \tcode{true}. \pnum \effects @@ -6426,7 +6426,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{i.length > 0} is \tcode{true}. \pnum @@ -6444,7 +6444,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects Both \tcode{x.length > 0} and \tcode{y.length > 0} are \tcode{true}. \pnum diff --git a/source/memory.tex b/source/memory.tex index bfa2a672b6..3cd37d841c 100644 --- a/source/memory.tex +++ b/source/memory.tex @@ -4093,8 +4093,11 @@ \begin{itemdescr} \pnum \expects -\tcode{get() != nullptr \&\& i >= 0}. -If \tcode{T} is \tcode{U[N]}, \tcode{i < N}. +\tcode{get() != nullptr} is \tcode{true}. + +\pnum +\hardexpects +$\tcode{i} \ge 0$. If \tcode{T} is \tcode{U[N]}, $\tcode{i} < \tcode{N}$. \pnum \returns diff --git a/source/ranges.tex b/source/ranges.tex index b5204c94a1..2a606adfea 100644 --- a/source/ranges.tex +++ b/source/ranges.tex @@ -1889,7 +1889,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{!empty()} is \tcode{true}. \pnum @@ -1906,7 +1906,7 @@ \begin{itemdescr} \pnum -\expects +\hardexpects \tcode{!empty()} is \tcode{true}. \pnum diff --git a/source/support.tex b/source/support.tex index 99d7b92375..4c1183a5e6 100644 --- a/source/support.tex +++ b/source/support.tex @@ -880,9 +880,12 @@ Additionally, each of the following macros is defined in a hardened implementation: \begin{codeblock} #define @\defnlibxname{cpp_lib_hardened_array}@ 202502L // also in \libheader{array} +#define @\defnlibxname{cpp_lib_hardened_basic_stacktrace}@ 202506L // also in \libheader{stacktrace} #define @\defnlibxname{cpp_lib_hardened_basic_string}@ 202502L // also in \libheader{string} #define @\defnlibxname{cpp_lib_hardened_basic_string_view}@ 202502L // also in \libheader{string_view} #define @\defnlibxname{cpp_lib_hardened_bitset}@ 202502L // also in \libheader{bitset} +#define @\defnlibxname{cpp_lib_hardened_common_iterator}@ 202506L // also in \libheader{iterator} +#define @\defnlibxname{cpp_lib_hardened_counted_iterator}@ 202506L // also in \libheader{iterator} #define @\defnlibxname{cpp_lib_hardened_deque}@ 202502L // also in \libheader{deque} #define @\defnlibxname{cpp_lib_hardened_expected}@ 202502L // also in \libheader{expected} #define @\defnlibxname{cpp_lib_hardened_forward_list}@ 202502L // also in \libheader{forward_list} @@ -890,9 +893,11 @@ #define @\defnlibxname{cpp_lib_hardened_list}@ 202502L // also in \libheader{list} #define @\defnlibxname{cpp_lib_hardened_mdspan}@ 202502L // also in \libheader{mdspan} #define @\defnlibxname{cpp_lib_hardened_optional}@ 202502L // also in \libheader{optional} +#define @\defnlibxname{cpp_lib_hardened_shared_ptr_array}@ 202506L // also in \libheader{memory} #define @\defnlibxname{cpp_lib_hardened_span}@ 202502L // also in \libheader{span} #define @\defnlibxname{cpp_lib_hardened_valarray}@ 202502L // also in \libheader{valarray} #define @\defnlibxname{cpp_lib_hardened_vector}@ 202502L // also in \libheader{vector} +#define @\defnlibxname{cpp_lib_hardened_view_interface}@ 202506L // also in \libheader{ranges} \end{codeblock} \pnum