Namespaces
Variants

std:: invocable, std:: regular_invocable

From cppreference.net
헤더 파일에 정의됨 <concepts>
template < class F, class ... Args >

concept invocable =
requires ( F && f, Args && ... args ) {
std:: invoke ( std:: forward < F > ( f ) , std:: forward < Args > ( args ) ... ) ;
/* 동등성 보존을 요구하지 않음 */

} ;
(C++20부터)
template < class F, class ... Args >
concept regular_invocable = std :: invocable < F, Args... > ;
(C++20부터)

invocable 개념은 호출 가능 타입 F 가 인수 집합 Args... 와 함께 함수 템플릿 std::invoke 를 사용하여 호출될 수 있음을 지정합니다.

regular_invocable 개념은 invocable 개념에 invoke 표현식이 등식 보존적(equality-preserving) 이어야 하며 함수 객체나 인수를 수정하지 않아야 한다는 요구사항을 추가합니다.

목차

동등성 보존

표준 라이브러리 개념의 requires expressions 에 선언된 표현식들은 equality-preserving 해야 합니다(다르게 명시된 경우를 제외하고).

참고 사항

invocable regular_invocable 사이의 구분은 순전히 의미론적입니다.

난수 생성기는 invocable 을 만족할 수 있지만 regular_invocable 을 만족할 수 없습니다 ( 희극적인 경우들 은 제외).

참조문헌

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

참고 항목

주어진 인수 타입들로 (마치 std::invoke 를 사용하듯) 호출 가능한 타입인지 확인합니다
(클래스 템플릿)

외부 링크

invocable regular_invocable 를 모두 만족하는 난수 생성기의 농담 예시 입니다.