home | help
std::is_within_lifetime(3)     C++ Standard Libary    std::is_within_lifetime(3)

NAME
     std::is_within_lifetime - std::is_within_lifetime

Synopsis
	Defined in header <type_traits>
	template<   class  T  > 					  (since
     C++26)
	consteval bool is_within_lifetime( const T* ptr ) noexcept;

	Determines whether the pointer ptr points to an object	that  is  within
     its lifetime.

	During	the evaluation of an expression E as a core constant expression,
     a call to
	std::is_within_lifetime is ill-formed unless ptr points to an object

	  * that is usable in constant expressions, or
	  * whose complete objectas lifetime began within E.

Parameters
	p - pointer to detect

Return value
	true if pointer ptr points to an object that  is  within  its  lifetime;
     otherwise
	false.

Example
	std::is_within_lifetime  can  be used to check whether a union member is
     active:

     // Run this code

      #include <type_traits>

      // an optional boolean type occupying only one byte,
      // assuming sizeof(bool) == sizeof(char)
      struct optional_bool
      {
	  union { bool b; char c; };

	  // assuming the value representations for true and false
	  // are distinct from the value representation for 2
	  constexpr optional_bool() : c(2) {}
	  constexpr optional_bool(bool b) : b(b) {}

	  constexpr auto has_value() const -> bool
	  {
	      if consteval
	      {
		  return std::is_within_lifetime(&b); // during constant evalua-
     tion,
						      // cannot read from c
	      }
	      else
	      {
		  return c != 2; // during runtime, must read from c
	      }
	  }

	  constexpr auto operator*() -> bool&
	  {
	      return b;
	  }
      };

      int main()
      {
	  constexpr optional_bool disengaged;
	  constexpr optional_bool engaged(true);

	  static_assert(!disengaged.has_value());
	  static_assert(engaged.has_value());
	  static_assert(*engaged);
      }

http://cppreference.com 	   2024.06.10	      std::is_within_lifetime(3)

home | help