std::experimental::ranges:: swap
|
Определено в заголовке
<experimental/ranges/utility>
|
||
|
namespace
{
constexpr
/* unspecified */
swap
=
/* unspecified */
;
|
(ranges TS)
(объект точки кастомизации) |
|
|
Сигнатура вызова
|
||
|
template
<
class
T,
class
U
>
requires
/* see below */
|
||
Обменивает значения, на которые ссылаются t и u .
Вызов
ranges::swap
эквивалентен:
- template < class T > void swap ( T & , T & ) = delete ;
- template < class T, std:: size_t N > void swap ( T ( & ) [ N ] , T ( & ) [ N ] ) = delete ;
-
любые объявления
swap, найденные с помощью поиска, зависимого от аргументов .
T
и
U
являются lvalue-ссылками на массивы одинаковой длины (но, возможно, с разными типами элементов) и
ranges::
swap
(
*
t,
*
u
)
является допустимым выражением.
T
и
U
оба являются
V&
для некоторого типа
V
, который удовлетворяет синтаксическим требованиям
MoveConstructible
<
V
>
и
Assignable
<
V
&
, V
>
, обменивается значениями по ссылкам как если бы с помощью
V v
{
std
::
move
(
t
)
}
;
t
=
std
::
move
(
u
)
;
u
=
std
::
move
(
v
)
;
. Если семантические требования любого из концептов не выполняются, программа является некорректной; диагностика не требуется.
ranges::swap
является некорректным.
ranges:: swap может использоваться в константных выражениях, если каждая вызываемая им функция (как указано выше) может быть так использована.
Содержание |
Объекты точек кастомизации
Имя
ranges::swap
обозначает
объект точки кастомизации
, который является
функциональным объектом
типа
литерального
Semiregular
класса (обозначаемого, для целей демонстрации, как
SwapT
). Все экземпляры
SwapT
равны. Таким образом,
ranges::swap
может свободно копироваться, и его копии могут использоваться взаимозаменяемо.
Для заданного набора типов
Args...
, если
std::
declval
<
Args
>
(
)
...
удовлетворяют требованиям к аргументам для
ranges::swap
выше,
SwapT
будет удовлетворять
ranges
::
Invocable
<
const
SwapT, Args...
>
. В противном случае ни один оператор вызова функции
SwapT
не участвует в разрешении перегрузки.
В каждой единице трансляции, где определен
ranges::swap
, он ссылается на один и тот же экземпляр объекта точки кастомизации. (Это означает, что его можно свободно использовать в таких конструкциях, как встроенные функции и шаблоны функций без нарушения
правила одного определения
.)
Исключения
swap
находится, как описано выше.
std:: is_nothrow_move_assignable < V > :: value )
Пример
|
Этот раздел не завершён
Причина: отсутствует пример |
Смотрите также
|
обменивает значения двух объектов
(шаблон функции) |