From 494f48475cf05de95dccc40dccdd7cd99cc334cc 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 c76fa23ee5..f3b1c06e77 100644 --- a/source/meta.tex +++ b/source/meta.tex @@ -647,7 +647,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} @@ -2844,14 +2845,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 6d83f3e90c..0a72df71e3 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}