void* operator new(size_t size)
requires same_as<Allocator, void> || default_initializable<Allocator>; // (1)
template<class Alloc, class... Args>
requires same_as<Allocator, void> || convertible_to<const Alloc&, Allocator>
void* operator new(size_t size, allocator_arg_t, const Alloc& alloc, const Args&...); // (2)
template<class This, class Alloc, class... Args>
requires same_as<Allocator, void> || convertible_to<const Alloc&, Allocator>
void* operator new(size_t size, const This&, allocator_arg_t, const Alloc& alloc, const Args&...);
概要
generator::promise_type
クラスのnew演算子オーバーロード。
ここで動作説明用の型をいくつか導入する。A
型を下記の通りとする。
generator
クラステンプレートのテンプレートパラメータAllocator
がvoid
でなければ、Allocator
。- テンプレートパラメータ
Alloc
を持つオーバーロードでは、Alloc
。 - そうでなければ
allocator<void>
。
U
型をサイズおよびアライメントが__STDCPP_DEFAULT_NEW_ALIGNMENT__
に等しい未規定の型としたとき、B
型をallocator_traits<A>::template rebind_alloc<U>
とする。
適格要件
allocator_traits<B>::pointer
はポインタ型。
効果
B
型のアロケータb
を、オーバーロード(1)ではA()
により、オーバーロード(2)(3)ではA(alloc)
により初期化する。
アロケータb
を用いて、サイズsize
のコルーチン・ステートと、後ほどoperator delete
によるb
を用いたメモリブロック解放で必要とされる追加状態を合わせたストレージに必要となる、U
型の最小配列ストレージを確保する。
戻り値
確保されたストレージへのポインタ。
バージョン
言語
- C++23
処理系
- Clang: ??
- GCC: ??
- ICC: ??
- Visual C++: ??