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이 네 조합 모두에 대해 잘 형성돼야 해요.

의미 요구사항

I1I2는 그것이 포함하는 모든 컨셉이 모델링될 때만 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>);
}

더 알아보기 (Learn more)

cppreference