C++ 名前付き要件: DefaultInsertable (C++11以降)
From cppreference.com
指定されたアロケータによって、その型のオブジェクトをインプレースでデフォルト構築できることを指定します。
目次 |
[編集] 要件
以下の型、値、式が与えられた場合
| 型 | 定義 |
T
|
オブジェクト型 |
A
|
アロケータ型 |
X
|
以下のすべての条件を満たすコンテナ型
|
| 値 | 定義 |
| m | 型 A の左辺値 |
| p | 型 T* のポインタ |
式 std::allocator_traits<A>::construct(m, p)がwell-formedである場合、TはXにDefaultInsertableです。
[編集] 注意
デフォルトでは、::new((void*)p) T()(C++20まで)std::construct_at(p)(C++20以降)のように、オブジェクトを値初期化します。
値初期化が望ましくない場合(たとえば、オブジェクトがクラス型ではなく、ゼロ埋めが不要な場合)は、カスタムAllocator::constructを提供することで回避できます。
C++23までstd::basic_stringの要素を構築する際にはカスタムconstructが使用されることが要求されていましたが、すべての実装ではデフォルトのメカニズムしか使用されていませんでした。この要件は、既存の実践に合わせるためにP1072R10によって修正されました。
[編集] 欠陥報告
以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。
| DR | 適用対象 | 公開された動作 | 正しい動作 |
|---|---|---|---|
| N3346 | C++11 | CopyInsertableとMoveInsertableの要件は存在しますが、DefaultInsertableが欠落していました。存在していましたが、DefaultInsertableは欠落していました。 |
要件が追加されました。 |
[編集] 関連項目
| DefaultConstructible | |
| CopyInsertable | |
| MoveInsertable | |
| EmplaceConstructible | |
| Erasable |