C++ named requirements: DefaultInsertable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
指定されたアロケータによって、その型のオブジェクトがデフォルト構築可能であることを指定します。
目次 |
要件
以下の型、値、および式が与えられた場合:
| 型 | 定義 |
T
|
オブジェクト型 |
A
|
アロケータ型 |
X
|
以下の全ての条件を満たすコンテナ型:
|
| 値 | 定義 |
| m |
型
A
の左辺値
|
| p |
型
T*
のポインタ
|
もし式
std::
allocator_traits
<
A
>
::
construct
(
m, p
)
が well-formed であれば、
T
は
DefaultInsertable
であり、
X
に挿入可能です。
注記
デフォルトでは、これはオブジェクトを value-initialize します。具体的には :: new ( ( void * ) p ) T ( ) (C++20まで) std:: construct_at ( p ) (C++20以降) によって行われます。
値初期化が望ましくない場合、例えばオブジェクトが非クラス型でありゼロ初期化が必要ない場合には、
カスタム
Allocator::construct
を提供することで回避できます。
C++23までは
construct
が
std::basic_string
の要素構築時に使用されることが要求されていましたが、すべての実装はデフォルトのメカニズムのみを使用していました。この要求は既存の実装に合わせて
P1072R10
によって修正されました。
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| N3346 | C++11 |
要件
CopyInsertable
および
MoveInsertable
は存在するが、 DefaultInsertable が欠落していた |
要件を追加 |
関連項目
| DefaultConstructible | |
| CopyInsertable | |
| MoveInsertable | |
| EmplaceConstructible | |
| Erasable |