std::ranges::iter_move
Определён в заголовочном файле <iterator> | ||
|---|---|---|
inline namespace /* unspecified */ {
inline constexpr /* unspecified */ iter_move = /* unspecified */;
}
| (начиная с C++20) (объект точки настройки) | |
| Сигнатура вызова | ||
template< class T >
requires /* see below */
constexpr decltype(auto) iter_move( T&& t ) noexcept(/* see below */);
| (начиная с C++20) |
Получает ссылку на rvalue или временный объект prvalue из заданного итератора.
ranges::iter_move(t) эквивалентно выражению:
-
iter_move(t), еслиtимеет тип класса или перечисления и выражение корректно при рассмотрении в качестве невычисляемого операнда, причём разрешение перегрузки дляiter_moveвыполняется только с кандидатами, найденными с помощью поиска, зависящего от аргументов. - В противном случае,
std::move(*t), если*tкорректно и является lvalue. - В противном случае,
*t, если*tкорректно и является rvalue.
Во всех остальных случаях вызов ranges::iter_move некорректен, что может привести к ошибке подстановки, если ranges::iter_move(e) появляется в непосредственном контексте инстанцирования шаблона.
Если ranges::iter_move(e) не равно *e, программа некорректна, диагностика не требуется.
Объекты точек настройки
Имя ranges::iter_move обозначает объект точки настройки, который является константным функциональным объектом типа класса литерального semiregular. Подробности см. в разделе Объект точки настройки.
Пример
См. также
|
(C++20) | приводит результат разыменования скорректированного базового итератора к соответствующему типу ссылки на rvalue (функция) |
|
(C++20) | приводит результат разыменования базового итератора к соответствующему типу ссылки на rvalue (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/ranges/iter_move