Namespaces
Variants

std::experimental::ranges:: swap

From cppreference.net
헤더 파일에 정의됨 <experimental/ranges/utility>
namespace {

constexpr /* unspecified */ swap = /* unspecified */ ;

}
(ranges TS)
(customization point object)
호출 시그니처
template < class T, class U >

requires /* see below */

void swap ( T && t, U && u ) noexcept ( /* see below */ ) ;

t u 가 참조하는 값을 교환합니다.

ranges::swap 에 대한 호출은 다음과 동일합니다:

1) ( void ) swap ( std:: forward < T > ( t ) , std:: forward < U > ( u ) ) , 해당 표현식이 유효한 경우, 여기서 오버로드 해결 은 다음 후보들을 사용하여 수행됩니다:
  • 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 가 참조하는 값을 교환하지 않으면, 프로그램의 형식이 잘못되었습니다; 진단은 필요하지 않습니다.
2) 그렇지 않으면, ( void ) ranges:: swap_ranges ( t, u ) , 만약 T U 가 동일한 크기(하지만 서로 다른 요소 타입일 수 있음)의 배열 타입에 대한 lvalue 참조이고 ranges:: swap ( * t, * u ) 가 유효한 표현식인 경우.
3) 그렇지 않고, T U 가 모두 어떤 타입 V 에 대한 V& 이며, 해당 타입 V MoveConstructible < V > Assignable < V & , V > 의 구문 요구사항을 충족하는 경우, 참조된 값들을 마치 V v { std :: move ( t ) } ; t = std :: move ( u ) ; u = std :: move ( v ) ; 와 같이 교환합니다. 두 개념 중 어느 하나의 의미론적 요구사항이 충족되지 않으면 프로그램의 형식이 잘못되었으며; 진단은 요구되지 않습니다.
4) 다른 모든 경우에서, 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 이 정의된 모든 번역 단위에서, 이는 동일한 사용자 지정 지점 객체의 인스턴스를 참조합니다. (이는 인라인 함수 및 함수 템플릿과 같은 곳에서 일 정의 규칙 을 위반하지 않고 자유롭게 사용될 수 있음을 의미합니다.)

예외

1)
noexcept 명세:
noexcept ( noexcept ( ( void ) swap ( std:: forward < T > ( t ) , std:: forward < T > ( u ) ) ) )
, 여기서 swap 은 위에서 설명한 방식으로 찾습니다.
2)
noexcept 명세:
noexcept ( noexcept ( ranges:: swap ( * t, * u ) ) )
3)

예제

참고 항목

두 객체의 값을 교환
(함수 템플릿)