Namespaces
Variants

std:: swappable, std:: swappable_with

From cppreference.net
헤더에 정의됨 <concepts>
template < class T >

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

} ;
(1) (C++20부터)
template < class T, class U >

concept swappable_with =
std:: common_reference_with < 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) (C++20부터)

swappable<T> 개념은 T 타입의 lvalue가 교환 가능함을 명시합니다.

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

동등성 보존

표준 라이브러리 개념의 requires expressions 에 선언된 표현식들은 equality-preserving 해야 합니다(다르게 명시된 경우를 제외하고).

참조문헌

  • C++23 표준 (ISO/IEC 14882:2024):
  • 18.4.9 컨셉트 swappable [concept.swappable]
  • C++20 표준(ISO/IEC 14882:2020):
  • 18.4.9 개념 swappable [concept.swappable]