名前空間
変種
操作

C++ 名前付き要件: CopyInsertable (C++11 以降)

From cppreference.com
 
 
C++ 名前付き要件
 

指定されたアロケータによって、型 T のオブジェクトをインプレースでコピー構築できることを示します。

[編集] 要件

以下の型、値、式が与えられた場合

定義
T オブジェクト型
A アロケータ型
X 以下のすべての条件を満たすコンテナ型
  • X::value_typeT と同じである。
  • X::allocator_typeは、std::allocator_traits<A>::rebind_alloc<T>と同じです。
定義
m A の左辺値
p T* のポインタ
Expression 定義
v T 型の lvalue、または const T 型の lvalue、あるいは const T 型の rvalue を示す式
expr std::allocator_traits<A>::construct(m, p, v)

XTCopyInsertable であるとは、以下のすべての条件が満たされること。

  • TXMoveInsertable である。
  • expr は well-formed (正しく形成されている) である。
  • expr の評価は v の値を変更しない。
  • expr の評価の直後、v の値は *p と同等である。

[編集] ノート

Astd::allocator<T> の場合、これは配置 new を呼び出します。これは、::new((void*)p) T(v)(C++20 まで)std::construct_at(p, v)(C++20 以降) に相当します。

C++23までstd::basic_stringの要素を構築する際にはカスタムconstructが使用されることが要求されていましたが、すべての実装ではデフォルトのメカニズムしか使用されていませんでした。この要件は、既存の実践に合わせるためにP1072R10によって修正されました。

[編集] 欠陥報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 2177 C++11 expr の評価には後条件がなかった。 追加された
LWG 3957 C++11 vT 型の rvalue を示すことができる。 除外された
English 日本語 中文(简体) 中文(繁體)