std::indirectly_swappable
std::indirectly_swappable (간접 교환 가능 컨셉)
각각 std::indirectly_readable을 모델링하는 두 타입 사이의 관계를 명세하는 컨셉이에요. 그 참조 타입들을 서로 교환(swap)할 수 있어요. C++20부터 있어요.
출처: cppreference
본문
<iterator> 헤더에 정의돼 있어요.
template< class I1, class I2 = I1 >
concept indirectly_swappable =
std::indirectly_readable<I1> &&
std::indirectly_readable<I2> &&
requires( const I1 i1, const I2 i2 )
{
ranges::iter_swap(i1, i1);
ranges::iter_swap(i1, i2);
ranges::iter_swap(i2, i1);
ranges::iter_swap(i2, i2);
};
indirectly_swappable 컨셉은 각각 std::indirectly_readable을 모델링하는 두 타입 사이의 관계를 명세하는데, 그 참조 타입들이 교환될 수 있어요. ranges::iter_swap이 네 조합 모두에 대해 잘 형성돼야 해요.
의미 요구사항
I1과 I2는 그것이 포함하는 모든 컨셉이 모델링될 때만 indirectly_swappable을 모델링해요.
동등성 보존(Equality preservation)
표준 라이브러리 컨셉의 requires 표현식에 선언된 표현식은 (명시된 경우를 제외하고) 동등성 보존이 요구돼요.
예제
#include <iterator>
#include <vector>
#include <concepts>
int main()
{
static_assert(std::indirectly_swappable<std::vector<int>::iterator,
std::vector<int>::iterator>);
}