std::experimental::ranges:: swap
|
헤더 파일에 정의됨
<experimental/ranges/utility>
|
||
|
namespace
{
constexpr
/* unspecified */
swap
=
/* unspecified */
;
|
(ranges TS)
(customization point object) |
|
|
호출 시그니처
|
||
|
template
<
class
T,
class
U
>
requires
/* see below */
|
||
t 와 u 가 참조하는 값을 교환합니다.
ranges::swap
에 대한 호출은 다음과 동일합니다:
- 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
가 동일한 크기(하지만 서로 다른 요소 타입일 수 있음)의 배열 타입에 대한 lvalue 참조이고
ranges::
swap
(
*
t,
*
u
)
가 유효한 표현식인 경우.
T
와
U
가 모두 어떤 타입
V
에 대한
V&
이며, 해당 타입
V
가
MoveConstructible
<
V
>
와
Assignable
<
V
&
, V
>
의 구문 요구사항을 충족하는 경우, 참조된 값들을 마치
V v
{
std
::
move
(
t
)
}
;
t
=
std
::
move
(
u
)
;
u
=
std
::
move
(
v
)
;
와 같이 교환합니다. 두 개념 중 어느 하나의 의미론적 요구사항이 충족되지 않으면 프로그램의 형식이 잘못되었으며; 진단은 요구되지 않습니다.
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
이 정의된 모든 번역 단위에서, 이는 동일한 사용자 지정 지점 객체의 인스턴스를 참조합니다. (이는 인라인 함수 및 함수 템플릿과 같은 곳에서
일 정의 규칙
을 위반하지 않고 자유롭게 사용될 수 있음을 의미합니다.)
예외
swap
은 위에서 설명한 방식으로 찾습니다.
std:: is_nothrow_move_assignable < V > :: value )
예제
|
이 섹션은 불완전합니다
이유: 예제가 없음 |
참고 항목
|
두 객체의 값을 교환
(함수 템플릿) |