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_invocable은 std::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>);
}