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;
}
出力
1078523331
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: ??
- Visual C++: ??