Spec-Zone.ru › C++

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) является выражение-эквивалентным:

  1. iter_move(t), если t имеет тип класса или перечисления, и выражение корректно при обработке как невычисленного операнда, где разрешение перегрузки iter_move выполняется только с кандидатами, найденными с помощью поиска зависимых от аргументов.
  2. Иначе, std::move(*t) если *t корректно и является lvalue.
  3. Иначе, *t если *t корректно и является rvalue.

Во всех остальных случаях вызов ranges::iter_move некорректен, что может привести к неудаче подстановки, когда ranges::iter_move(e) появляется в непосредственном контексте экземпляризации шаблона.

Если ranges::iter_move(e) не равно *e, программа некорректна, диагностика не требуется.

Объекты точки кастомизации

Имя ranges::iter_move обозначает объект точки кастомизации, который является const функциональным объектом типа литерала semiregular класса. Для наглядности, неквалифицированная версия его типа обозначается как __iter_move_fn.

Все экземпляры __iter_move_fn равны. Эффекты вызова различных экземпляров типа __iter_move_fn с одинаковыми аргументами эквивалентны, независимо от того, является ли выражение, обозначающее экземпляр, lvalue или rvalue, и является ли он const-квалифицированным или нет (однако экземпляр с квалификатором volatile не обязан быть вызываемым). Таким образом, ranges::iter_move можно свободно копировать, и его копии можно использовать взаимозаменяемо.

При заданном наборе типов Args..., если std::declval<Args>()... удовлетворяет требованиям для аргументов ranges::iter_move выше, __iter_move_fn моделирует

  • std::invocable<__iter_move_fn, Args...>,
  • std::invocable<const __iter_move_fn, Args...>,
  • std::invocable<__iter_move_fn&, Args...>, и
  • std::invocable<const __iter_move_fn&, Args...>.

В противном случае, ни один оператор вызова функции __iter_move_fn не участвует в разрешении перегрузки.

Пример

См. также

iter_move
(C++20)
преобразует результат обращение к заданному итератору в ассоциированный тип ссылки на rvalue
(функция)
iter_move
(C++20)
преобразует результат обращение к заданному итератору в ассоциированный тип ссылки на rvalue
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/ranges/iter_move

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API