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
的,当且仅当满足以下所有条件:
-
T可 移动插入 到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 之前要求构造
std::basic_string
元素时必须使用自定义的
construct
,但所有实现都仅使用了默认机制。该要求已通过
P1072R10
修正以符合现有实践。
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时的行为 | 正确行为 |
|---|---|---|---|
| LWG 2177 | C++11 | 求值 expr 没有任何后置条件 | 已添加 |
| LWG 3957 | C++11 |
v
可能表示类型
T
的右值
|
已排除 |