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。