名前空間
変種
操作

std::invocable, std::regular_invocable

From cppreference.com
< cpp‎ | concepts
 
 
 
ヘッダ <concepts> で定義
template< class F, class... Args >

concept invocable =
    requires(F&& f, Args&&... args) {
        std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
            /* equality-preserving である必要はない */

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

invocable コンセプトは、呼び出し可能な型 F が、関数テンプレート std::invoke を使用して引数リスト Args... で呼び出せることを指定します。

regular_invocable コンセプトは、invocable コンセプトに加えて、invoke 式が 等価性保存 であり、関数オブジェクトまたは引数を変更しないことを要求します。

目次

[編集] 等価性保持

標準ライブラリのコンセプトのrequiresで宣言された式は、(特に明記されていない限り)等価性保持である必要があります。

[編集] 注記

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

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

[編集] 参考文献

  • C++23標準 (ISO/IEC 14882:2024)
  • 18.7.2 Concept invocable [concept.invocable]
  • 18.7.3 Concept regular_invocable [concept.regularinvocable]
  • C++20 standard (ISO/IEC 14882:2020)
  • 18.7.2 Concept invocable [concept.invocable]
  • 18.7.3 Concept regular_invocable [concept.regularinvocable]

[編集] 関連項目

ある型が与えられた引数型で(std::invokeのように)呼び出し可能であるかをチェックする
(クラステンプレート) [編集]

[編集] 外部リンク

invocableregular_invocable の両方を満たす乱数生成器の ジョーク例
English 日本語 中文(简体) 中文(繁體)