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