std::indirectly_unary_invocable

std::indirectly_unary_invocable (간접 단항 호출 가능 컨셉)

indirectly_readable 타입이 참조하는 값을 인자로 호출할 수 있는 호출 가능 타입에 대한 요구사항을 명세하는 컨셉이에요. C++20부터 있어요.

출처: cppreference

본문

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

// indirectuly_unary_invocable
template< class F, class I >
    concept indirectly_unary_invocable =
        std::indirectly_readable<I> &&
        std::copy_constructible<F> &&
        std::invocable<F&, /*indirect-value-t*/<I>> &&
        std::invocable<F&, std::iter_reference_t<I>> &&
        std::common_reference_with<
            std::invoke_result_t<F&, /*indirect-value-t*/<I>>,
            std::invoke_result_t<F&, std::iter_reference_t<I>>>;

std::indirectly_unary_invocable 컨셉은 indirectly_readable 타입이 참조하는 값을 인자로 호출할 수 있는 호출 가능 타입에 대한 요구사항을 명세해요. 값·참조 두 호출 결과가 서로 common reference를 가져야 해요.

regular 변형

// indirectly_regular_unary_invocable
template< class F, class I >
    concept indirectly_regular_unary_invocable =
        std::indirectly_readable<I> &&
        std::copy_constructible<F> &&
        std::regular_invocable<F&, /*indirect-value-t*/<I>> &&
        std::regular_invocable<F&, std::iter_reference_t<I>> &&
        std::common_reference_with<
            std::invoke_result_t<F&, /*indirect-value-t*/<I>>,
            std::invoke_result_t<F&, std::iter_reference_t<I>>>;

indirectly_regular_unary_invocablestd::regular_invocable을 요구하는 변형이에요.

예제

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

int main()
{
    static_assert(std::indirectly_unary_invocable<std::negate<int>,
                                                  std::vector<int>::iterator>);
}

더 알아보기 (Learn more)

cppreference