From 7c8030ac7504f2fa42f3ab1ce7ced76480bfb7a4 Mon Sep 17 00:00:00 2001 From: Eisenwave Date: Sat, 28 Mar 2026 21:58:09 +0100 Subject: [PATCH] P3450R1 Extend std::is_within_lifetime Fixes NB US 82-145 (C++26 CD). --- source/meta.tex | 14 +++++++++++--- source/support.tex | 2 +- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/source/meta.tex b/source/meta.tex index 34ce37bb46..caf38491f6 100644 --- a/source/meta.tex +++ b/source/meta.tex @@ -628,7 +628,8 @@ // \ref{meta.const.eval}, constant evaluation context constexpr bool is_constant_evaluated() noexcept; - consteval bool is_within_lifetime(const auto*) noexcept; + template + consteval bool is_within_lifetime(const T*) noexcept; } \end{codeblock} @@ -2581,14 +2582,21 @@ \indexlibraryglobal{is_within_lifetime}% \begin{itemdecl} -consteval bool is_within_lifetime(const auto* p) noexcept; +template + consteval bool is_within_lifetime(const T* p) noexcept; \end{itemdecl} \begin{itemdescr} +\pnum +\mandates +\tcode{static_cast(p)} is well-formed. + \pnum \returns \tcode{true} if \tcode{p} is a pointer to an object that is -within its lifetime\iref{basic.life}; otherwise, \tcode{false}. +within its lifetime\iref{basic.life} and +\tcode{static_cast(p)} is a constant subexpression; +otherwise, \tcode{false}. \pnum \remarks diff --git a/source/support.tex b/source/support.tex index 8ba3afa165..ef8c036b31 100644 --- a/source/support.tex +++ b/source/support.tex @@ -749,7 +749,7 @@ #define @\defnlibxname{cpp_lib_is_sufficiently_aligned}@ 202411L // freestanding, also in \libheader{memory} #define @\defnlibxname{cpp_lib_is_swappable}@ 201603L // freestanding, also in \libheader{type_traits} #define @\defnlibxname{cpp_lib_is_virtual_base_of}@ 202406L // freestanding, also in \libheader{type_traits} -#define @\defnlibxname{cpp_lib_is_within_lifetime}@ 202306L // freestanding, also in \libheader{type_traits} +#define @\defnlibxname{cpp_lib_is_within_lifetime}@ 202603L // freestanding, also in \libheader{type_traits} #define @\defnlibxname{cpp_lib_jthread}@ 201911L // also in \libheader{stop_token}, \libheader{thread} #define @\defnlibxname{cpp_lib_latch}@ 201907L // also in \libheader{latch} #define @\defnlibxname{cpp_lib_launder}@ 201606L // freestanding, also in \libheader{new}