Namespaces
Variants

C++ named requirements: DefaultInsertable (since C++11)

From cppreference.net
C++ named requirements

指定されたアロケータによって、その型のオブジェクトがデフォルト構築可能であることを指定します。

目次

要件

以下の型、値、および式が与えられた場合:

定義
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