- memory[meta header]
- function template[meta id-type]
- std[meta namespace]
- cpp23[meta cpp]
namespace std {
template <class T>
T* start_lifetime_as(void* p) noexcept; // (1)
template <class T>
const T* start_lifetime_as(const void* p) noexcept; // (2)
template <class T>
volatile T* start_lifetime_as(volatile void* p) noexcept; // (3)
template <class T>
const volatile T* start_lifetime_as(const volatile void* p) noexcept; // (4)
}オブジェクトの生存期間を開始することを明示する。
T が implicit-lifetime types であること。また、T が 完全型であること。
[p, (char*)p + sizeof(T))の範囲がpを通じてアクセス可能な領域であること。pが型Tのアライメントを満たすこと。
型 T のオブジェクト(アドレスは p)が暗黙的に構築される。T 内にネストされているオブジェクトも暗黙的に構築される。
暗黙的に構築された型 T のオブジェクトへのポインタを返す。
投げない。
#include <cstdint>
#include <memory>
#include <iostream>
int main() {
float f = 3.14f;
std::uint32_t* n = std::start_lifetime_as<std::uint32_t>(&f);
std::cout << *n << std::endl;
}- std::start_lifetime_as[color ff0000]
1078523331
- C++23
- Clang: ??
- GCC: ??
- Visual C++: ??