最終更新日時: 2026年06月09日 16時03分31秒 (JST)
yoh が更新

履歴 編集

function template
<execution>

# std::execution::task::promise_type::operator new(C++26)

    void* operator new(size_t size);  // (1)

    template<class... Args>
    void* operator new(size_t size, const Args&... args);  // (2)

    template<class This, class Alloc, class... Args>
    void* operator new(size_t size, const This&, allocator_arg_t, Alloc alloc, Args&&...);  // (3)

## 概要

`task::promise_type`クラスのnew演算子オーバーロード。

`U`型をサイズおよびアライメントが`__STDCPP_DEFAULT_NEW_ALIGNMENT__`である未規定の型としたとき、説明用の`PAlloc`を`allocator_traits<Alloc>::template rebind_alloc<U>`とする。

## 適格要件

`allocator_traits<PAlloc>::pointer`がポインタ型である。

## 効果

- (1) : 下記と等価

      return operator new(size, allocator_arg, allocator_type());

- (2), (3) :

  - `PAlloc`型のアロケータ`palloc`を`alloc`で初期化する。
  - サイズ`size`のコルーチンステートに十分なストレージとなる`U`の最小配列ストレージ、および`operator delete`が後で`palloc`と等しいアロケータでこのメモリブロックを解放するのに必要となる未規定の追加ストレージの確保に`palloc`を用いる。

## 戻り値

確保したストレージへのポインタ

## バージョン

### 言語

- C++26

### 処理系

- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??

## 関連項目

- `operator delete`

## 参照

- P3552R3 Add a Coroutine Task Type
- P3980R1 Task's Allocator Use