Namespaces
Variants

std::experimental::ranges:: Invocable, std::experimental::ranges:: RegularInvocable

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

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

} ;
(ranges TS)
template < class F, class ... Args >
concept bool RegularInvocable = Invocable < F, Args... > ;
(ranges TS)

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

RegularInvocable 개념은 Invocable 개념에 invoke 표현식이 동등성 보존(equality preserving)을 요구하며 함수 객체나 인수를 수정하지 않아야 한다는 조건을 추가합니다.

동등성 보존

표현식은 동일한 입력이 주어졌을 때 동일한 출력을 결과로 내놓는다면 등식 보존(equality preserving) 합니다.

  • 표현식의 입력은 피연산자들로 구성됩니다.
  • 표현식의 출력은 결과와 표현식에 의해 수정된 모든 피연산자(있는 경우)로 구성됩니다.

동등성 보존이 요구되는 모든 표현식은 추가로 안정적(stable) 이어야 합니다: 동일한 입력 객체로 이러한 표현식을 두 번 평가할 때, 해당 입력 객체에 명시적인 수정이 개입되지 않는 한 동일한 출력을 가져야 합니다.

달리 명시되지 않는 한, requires-expression 에서 사용되는 모든 표현식은 등식 보존적이고 안정적이어야 하며, 표현식의 평가는 비상수 피연산자만 수정할 수 있습니다. 상수인 피연산자는 수정되어서는 안 됩니다.

참고 사항

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

난수 생성기는 Invocable 을 만족할 수 있지만 RegularInvocable 을 만족할 수 없습니다 ( 코믹한 예외 는 제외).