std::experimental::ranges:: Swappable, std::experimental::ranges:: SwappableWith
|
Определено в заголовочном файле
<experimental/ranges/concepts>
|
||
|
template
<
class
T
>
concept
bool
Swappable
=
|
(1) | (ranges TS) |
|
template
<
class
T,
class
U
>
concept
bool
SwappableWith
=
|
(2) | (ranges TS) |
Концепт
Swappable<T>
определяет, что lvalue типа
T
являются заменяемыми.
Концепт
SwappableWith<T, U>
определяет, что выражения типа и категории значения, закодированные в
T
и
U
, могут быть обменены друг с другом.
SwappableWith<T, U>
выполняется только если вызов
ranges::
swap
(
t, u
)
обменивает значения
t
и
u
, то есть, при наличии различных объектов
t2
, равных
t
, и
u2
, равных
u
, после вычисления либо
ranges::
swap
(
t, u
)
, либо
ranges::
swap
(
u, t
)
,
t2
становится равным
u
, а
u2
становится равным
t
.
Сохранение равенства
Выражение называется сохраняющим равенство если оно даёт равные результаты при равных входных данных.
- Входные данные выражения состоят из его операндов.
- Выходные данные выражения состоят из его результата и всех операндов, изменённых выражением (если таковые имеются).
Каждое выражение, которое должно сохранять равенство, дополнительно должно быть стабильным : два вычисления такого выражения с одинаковыми входными объектами должны давать равные результаты при отсутствии каких-либо явных изменений этих входных объектов между вычислениями.
Если не указано иное, каждое выражение, используемое в requires-expression , должно сохранять равенство и быть стабильным, и вычисление выражения может изменять только свои неконстантные операнды. Операнды, являющиеся константными, не должны изменяться.