Namespaces
Variants

std::experimental::ranges:: Swappable, std::experimental::ranges:: SwappableWith

From cppreference.net
Определено в заголовочном файле <experimental/ranges/concepts>
template < class T >

concept bool Swappable =
requires ( T & a, T & b ) {
ranges:: swap ( a, b ) ;

} ;
(1) (ranges TS)
template < class T, class U >

concept bool SwappableWith =
CommonReference <
const std:: remove_reference_t < T > & ,
const std:: remove_reference_t < U > & > &&
requires ( T && t, U && u ) {
ranges:: swap ( std:: forward < T > ( t ) , std:: forward < T > ( t ) ) ;
ranges:: swap ( std:: forward < U > ( u ) , std:: forward < U > ( u ) ) ;
ranges:: swap ( std:: forward < T > ( t ) , std:: forward < U > ( u ) ) ;
ranges:: swap ( std:: forward < U > ( u ) , std:: forward < T > ( t ) ) ;

} ;
(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 , должно сохранять равенство и быть стабильным, и вычисление выражения может изменять только свои неконстантные операнды. Операнды, являющиеся константными, не должны изменяться.