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
中:
- 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 3957 | C++11 | v 可以表示 T 类型右值
|
已排除 |