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 式が 等価性保存 であり、関数オブジェクトまたは引数のいずれも変更しないことを要求します。

目次

翻訳内容: - "Contents" → "目次" - "Equality preservation" → 変更なし(C++専門用語のため) - "Notes" → "注記" - "References" → "参考文献" - "See also" → "関連項目" - "External links" → "外部リンク" HTMLタグ、属性、
タグ内のテキストは翻訳せず、元のフォーマットを保持しています。

等価性保存

標準ライブラリコンセプトの requires で宣言された式は、 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 の両方を満たす乱数生成器の 冗談の例