std::indirectly_writable
| 定义于头文件 <iterator> |
||
| template< class Out, class T > concept indirectly_writable = |
(C++20 起) | |
概念 indirectly_writable<Out, T> 指定了将类型和值类别由 T 编码的值写入迭代器 Out 所引用对象的要求。
[编辑] 语义要求
令 e 为一个表达式,使得 decltype((e)) 为 T,且 o 为类型 Out 的可解引用对象,则 indirectly_writable<Out, T> 仅在以下情况被建模:
- 如果 std::indirectly_readable<Out> 被建模且 std::iter_value_t<Out> 与 std::decay_t<T> 类型相同,则在任何上述赋值后 *o 等于赋值前
e的值。
在评估任何上述赋值表达式后,不要求 o 可解引用。如果 e 是一个 xvalue,则它所表示的对象的最终状态是有效但未指定的。
[编辑] 等价性保留
在标准库概念的 requires 表达式中声明的表达式必须是等价性保留的(除非另有说明)。
[编辑] 注意
使用 operator* 的唯一有效方式是在赋值表达式的左侧。通过间接可写类型的相同值进行的赋值只能发生一次。
带有 const_cast 的必需表达式防止带有 prvalue reference 类型的 indirectly_readable 对象意外满足 indirectly_writable 的语法要求,同时允许代理引用在它们的 constness 是浅层的情况下继续工作。参见 Ranges TS issue 381。