Namespaces
Variants

iter_swap (ranges::concat_view:: iterator )

From cppreference.net
Ranges library
Range adaptors
friend constexpr void iter_swap ( const /*итератор*/ & x, const /*итератор*/ & y )
noexcept ( /* см. описание */ ) requires ( /* см. описание */ ) ;
(начиная с C++26)

Обменивает объекты, на которые указывают базовые итераторы x и y . Эквивалентно std:: visit
(
[ & ] ( const auto & it1, const auto & it2 )
{
if constexpr ( std:: is_same_v < decltype ( it1 ) , decltype ( it2 ) > )
ranges:: iter_swap ( it1, it2 ) ;
else
ranges:: swap ( * x, * y ) ;
} ,
x. it_  ,
y. it_
) ;

Выражение в requires клаузе эквивалентно std:: swappable_with < std:: iter_reference_t < /*iterator*/ > ,
std:: iter_reference_t < /*iterator*/ >> &&
( ... && std:: indirectly_swappable < ranges:: iterator_t < maybe-const  < Const, Views >>> )
.

Если x. it_  . valueless_by_exception ( ) || y. it_  . valueless_by_exception ( ) равно true , поведение не определено.

Эта функция не видна при обычном unqualified или qualified lookup , и может быть найдена только с помощью argument-dependent lookup , когда concat_view :: iterator  < Const > является ассоциированным классом аргументов.

Содержание

Параметры

x, y - итераторы

Исключения

Пусть its будет набором lvalue, где каждое значение имеет соответствующий тип в const ranges:: iterator_t < maybe-const  < Const, Views >> .

noexcept спецификация:
noexcept ( noexcept ( ranges:: swap ( * x, * y ) ) && ... && noexcept ( ranges:: iter_swap ( its, its ) ) )

Пример

Смотрите также

(C++20)
обменивает значения, на которые ссылаются два разыменовываемых объекта
(объект точки настройки)
обменивает элементы, на которые указывают два итератора
(шаблон функции)