Namespaces
Variants

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

From cppreference.net
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> 는 타입 T 의 좌측값(lvalue)이 교환 가능함을 명시합니다.

SwappableWith<T, U> 개념은 T U 로 인코딩된 타입과 값 범주에 해당하는 표현식들이 서로 교환 가능함을 명시합니다. SwappableWith<T, U> ranges:: swap ( t, u ) 호출이 t u 의 값을 교환할 때만 만족됩니다. 즉, t 와 동일한 별개의 객체 t2 u 와 동일한 별개의 객체 u2 가 주어졌을 때, ranges:: swap ( t, u ) 또는 ranges:: swap ( u, t ) 중 하나를 평가한 후에 t2 u 와 같고 u2 t 와 같아야 합니다.

동등성 보존

표현식은 동일한 입력이 주어졌을 때 동일한 출력을 결과로 내놓는다면 등식 보존적(equality preserving) 입니다.

  • 표현식의 입력은 피연산자들로 구성됩니다.
  • 표현식의 출력은 결과값과 표현식에 의해 수정된 모든 피연산자(있는 경우)로 구성됩니다.

동등성 보존이 요구되는 모든 표현식은 추가로 안정적(stable) 이어야 합니다: 동일한 입력 객체에 대한 이러한 표현식의 두 평가는 해당 입력 객체에 대한 명시적인 중간 수정이 없는 한 동일한 출력을 가져야 합니다.

달리 명시되지 않는 한, requires-expression 에서 사용되는 모든 표현식은 등식 보존적이고 안정적이어야 하며, 표현식의 평가는 비상수 피연산자만 수정할 수 있습니다. 상수인 피연산자는 수정되어서는 안 됩니다.