std::regular_invocable

std::regular_invocable (정규 호출 가능 개념)

호출 가능 타입 F를 인자 집합 Args...std::invoke로 호출할 수 있고, 호출이 동등성 보존이며 함수 객체와 인자를 수정하지 않는지를 명세하는 개념(concept)이에요. C++20부터 있어요.

출처: cppreference

본문

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

template< class F, class... Args >
concept regular_invocable = std::invocable<F, Args...>;

regular_invocable 개념은 invocable 개념(호출 가능 타입 F가 함수 템플릿 std::invoke로 인자 집합 Args...와 함께 호출될 수 있음)에 더해, invoke 표현식이 동등성 보존(equality-preserving)이어야 하고 함수 객체나 인자를 수정하지 않아야 한다는 조건을 추가해요.

즉 같은 인자로 반복 호출해도 같은 결과를 내는 "순수 함수" 같은 성질을 요구해요. 이 때문에 난수 생성기처럼 호출마다 다른 값을 내는 함수 객체는 invocable은 만족하지만 regular_invocable은 만족하지 못해요.

regular_invocablepredicate, relation 등 호출 관련 개념들이 기반으로 삼는 핵심 개념으로, 함수를 저장·복사·비교하는 알고리즘에서 안전성을 보장하는 데 쓰여요.

참고 문헌

  • C++23 표준 (ISO/IEC 14882:2024): 18.7.3 Concept regular_invocable [concept.regularinvocable]
  • C++20 표준 (ISO/IEC 14882:2020): 18.7.3 Concept regular_invocable [concept.regularinvocable]

더 알아보기 (Learn more)

cppreference