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 引用类型的 indirectly_readable
对象意外地满足 indirectly_writable
的语法要求,同时允许代理引用继续工作,只要它们的常量性是浅层的。请参阅 Ranges TS issue 381。