Namespaces
Variants

std::ranges:: iter_move

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
定义于头文件 <iterator>
inline namespace /* 未指定 */ {

inline constexpr /* 未指定 */ iter_move = /* 未指定 */ ;

}
(C++20 起)
(定制点对象)
调用签名
template < class T >

requires /* 见下文 */

constexpr decltype ( auto ) iter_move ( T && t ) noexcept ( /* 见下文 */ ) ;
(C++20 起)

从给定迭代器获取右值引用或纯右值临时对象。

一个 ranges :: iter_move ( t ) 表达式等价 于:

  1. iter_move ( t ) ,若 t 具有类或枚举类型,且该表达式在作为 不求值操作数 时是良构的,其中 iter_move 重载决议 仅通过 实参依赖查找 找到的候选函数进行。
  2. 否则, std :: move ( * t ) ,若 * t 是良构的且为左值。
  3. 否则, * t ,若 * t 是良构的且为右值。

在所有其他情况下,对 ranges::iter_move 的调用都是非良构的,当 ranges :: iter_move ( e ) 出现在模板实例化的直接上下文时,这可能导致 替换失败

如果 ranges :: iter_move ( e ) 不等于 * e ,则程序格式错误,无需诊断。

定制点对象

名称 ranges::iter_move 表示一个 定制点对象 ,它是一个字面量 semiregular 类类型的常量 函数对象 。详细信息请参阅 定制点对象

示例

参见

(C++20)
将对调整后的底层迭代器解引用的结果转换为其关联的右值引用类型
(函数)
(C++20)
将对底层迭代器解引用的结果转换为其关联的右值引用类型
(函数)