最終更新日時: 2025年09月26日 00時38分13秒 (JST)
Raclamusi が更新

履歴 編集

function template
<memory>

# std::start_lifetime_as(C++23)

    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++: ??

## 関連項目

- `std::start_lifetime_as_array`

## 参照

- P2590R2: Explicit lifetime management
- P2679R2: Fixing std::start_lifetime_as and std::start_lifetime_as_array