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
是一个右值,则它所表示的对象的最终状态是有效的,但未指定。
[编辑] 等值保留
在标准库概念的 requires 表达式 中声明的表达式必须是 等值保留的(除非另有说明)。
[编辑] 注释
operator* 的唯一有效用法是在赋值表达式的左侧。通过间接可写类型值的相同值进行的赋值只能发生一次。
使用 const_cast
的必要表达式可以防止具有右值 reference
类型的 indirectly_readable
对象意外地满足 indirectly_writable
的语法要求,同时允许代理引用继续工作,只要它们的 constness 是浅层的即可。请参见 范围 TS 问题 381。