Namespaces
Variants

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

From cppreference.net
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 であると言います。

  • 式への入力は、そのオペランドで構成されます。
  • 式からの出力は、その結果と、式によって変更されたすべてのオペランド(存在する場合)で構成されます。

等価性を保持することが要求されるすべての式は、さらに stable(安定性) が要求されます:同じ入力オブジェクトに対するそのような式の2回の評価は、それらの入力オブジェクトに対する明示的な変更がない限り、等しい出力を持たなければなりません。

特に明記されていない限り、 requires式 で使用される各式は、等価性を保存し安定していることが要求され、式の評価は非定数オペランドのみを変更できます。定数オペランドは変更してはなりません。

注記

Invocable RegularInvocable の区別は純粋に意味論的なものです。

乱数生成器は Invocable を満たす可能性がありますが、 RegularInvocable を満たすことはできません ( コミカルな を除く)。