C++ named requirements: CopyInsertable (since C++11)
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
指定されたアロケータによって、その型のオブジェクトがその場でコピー構築可能であることを指定します。
要件
以下の型、値、および式が与えられた場合:
| 型 | 定義 |
T
|
オブジェクト型 |
A
|
アロケータ型 |
X
|
以下の全ての条件を満たすコンテナ型:
|
| 値 | 定義 |
| m |
型
A
の左辺値
|
| p |
型
T*
のポインタ
|
| 式 | 定義 |
| v |
型
T
/
const
T
の左辺値を表す式、または型
const
T
の右辺値
|
| expr | std:: allocator_traits < A > :: construct ( m, p, v ) |
T
は、以下の条件がすべて満たされる場合に
X
へ
CopyInsertable
である:
-
Tは MoveInsertable であり、Xに挿入可能である。 - expr は適切な形式である。
- expr の評価は v の値を変更しない。
- expr の評価直後、 v の値は * p と等価である。
注記
A
が
std::
allocator
<
T
>
の場合、これは配置
new
を呼び出します。具体的には
::
new
(
(
void
*
)
p
)
T
(
v
)
(C++20以前)
std::
construct_at
(
p, v
)
(C++20以降)
によって行われます。
C++23までは
construct
が
std::basic_string
の要素構築時にカスタマイズされたものを使用することが要求されていましたが、すべての実装はデフォルトのメカニズムのみを使用していました。この要求は既存の実装に合わせて
P1072R10
によって修正されました。
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 2177 | C++11 | evaluting expr には事後条件がなかった | 追加された |
| LWG 3957 | C++11 |
v
は型
T
の右辺値を示す可能性があった
|
除外された |