std::indirect_equivalence_relation

std::indirect_equivalence_relation (간접 동치 관계 컨셉)

인자로 동치 관계를 호출하는 알고리즘에 대한 요구사항을 명세하는 컨셉이에요. std::equivalence_relation과 달리 I1·I2 자체가 아니라 그것들이 참조하는 타입에 적용돼요. C++20부터 있어요.

출처: cppreference

본문

<iterator> 헤더에 정의돼 있어요.

template< class F, class I1, class I2 = I1 >
concept indirect_equivalence_relation =
    std::indirectly_readable<I1> &&
    std::indirectly_readable<I2> &&
    std::copy_constructible<F> &&
    std::equivalence_relation
        <F&, /*indirect-value-t*/<I1>, /*indirect-value-t*/<I2>> &&
    std::equivalence_relation
        <F&, /*indirect-value-t*/<I1>, std::iter_reference_t<I2>> &&
    std::equivalence_relation
        <F&, std::iter_reference_t<I1>, /*indirect-value-t*/<I2>> &&
    std::equivalence_relation
        <F&, std::iter_reference_t<I1>, std::iter_reference_t<I2>>;

indirect_equivalence_relation 컨셉은 인자로 동치 관계를 호출하는 알고리즘에 대한 요구사항을 명세해요. 이 컨셉과 std::equivalence_relation의 핵심 차이는 I1·I2 자체가 아니라 그것들이 참조하는 타입에 적용된다는 점이에요. 값·참조 타입의 네 가지 조합 모두에서 성립해야 해요.

예제

#include <iterator>
#include <vector>
#include <concepts>
#include <functional>

int main()
{
    static_assert(std::indirect_equivalence_relation<std::equal_to<>>,
                   std::vector<int>::iterator, std::vector<int>::iterator>);
}

더 알아보기 (Learn more)

cppreference