C++ 具名要求:可复制插入 (CopyInsertable) (C++11 起)
出自cppreference.com
指定該類型的對象能以給定分配器原位複製構造。
要求
給定以下類型、值和表達式:
| 類型 | 定義 |
T
|
對象類型 |
A
|
分配器類型 |
X
|
滿足以下所有條件的容器類型:
|
| 值 | 定義 |
m
|
A 類型左值
|
p
|
T* 類型指針
|
| 表達式 | 定義 |
v
|
表示 T / const T 類型左值或 const T 類型右值的表達式
|
expr
|
std::allocator_traits<A>::construct(m, p, v)
|
如果滿足以下所有條件,那麼 T 可複製插入 (CopyInsertable) 到 X 中:
T可移動插入 (MoveInsertable) 到X中。expr良構。- 對
expr進行求值不會改變v的值。 - 在對
expr求值完成時,v的值等價於*p。
註解
如果 A 是 std::allocator<T>,那麼就會如同用 ::new((void*)p) T(v)(C++20 前)std::construct_at(p, v)(C++20 起) 調用布置 new。
儘管 C++23 前要求在構造 std::basic_string 的元素時使用定製的 construct,但所有實現都使用默認機制。P1072R10 更正了該要求以匹配既存實踐。
缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
| 缺陷報告 | 應用於 | 出版時的行為 | 正確行為 |
|---|---|---|---|
| LWG 2177 | C++11 | 對 expr 進行求值沒有任何後條件
|
添加後條件 |
| LWG 3957 | C++11 | v 可以表示 T 類型右值
|
已排除 |