23 General utilities library [utilities]

23.2 Utility components [utility]

23.2.3 swap [utility.swap]

template <class T> void swap(T& a, T& b) noexcept(see below);

Remarks: Эта функция не будет участвовать в разрешении перегрузки , если is_­move_­constructible_­v<T> не true и is_­move_­assignable_­v<T> является true. Выражение внутри noexcept эквивалентно:

is_nothrow_move_constructible_v<T> && is_nothrow_move_assignable_v<T>

Requires: Тип T должен быть MoveConstructible и MoveAssignable.

Effects: Обмен ценностями, хранящимися в двух местах.

template <class T, size_t N> void swap(T (&a)[N], T (&b)[N]) noexcept(is_nothrow_swappable_v<T>);

Remarks: Эта функция не будет участвовать в разрешении перегрузки , если is_­swappable_­v<T> не true.

Requires: a[i] должен быть swappable with b[i] у всех i в ассортименте [0, N).

Effects: Как будто мимо swap_­ranges(a, a + N, b).