std::is_invocable, std::is_invocable_r, std::is_nothrow_invocable, std::is_nothrow_invocable_r
From cppreference.com
| ヘッダ <type_traits> で定義 |
||
| template< class Fn, class... ArgTypes > struct is_invocable; |
(1) | (C++17以降) |
| template< class R, class Fn, class... ArgTypes > struct is_invocable_r; |
(2) | (C++17以降) |
| template< class Fn, class... ArgTypes > struct is_nothrow_invocable; |
(3) | (C++17以降) |
| template< class R, class Fn, class... ArgTypes > struct is_nothrow_invocable_r; |
(4) | (C++17以降) |
1) INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...) が未評価オペランドとして扱われた場合に整形式であるかどうかを判定します。
2) INVOKE<R>(std::declval<Fn>(), std::declval<ArgTypes>()...) が未評価オペランドとして扱われた場合に整形式であるかどうかを判定します。
3) INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...) が未評価オペランドとして扱われた場合に整形式であり、かつ例外をスローしないことが分かっているかどうかを判定します。
4) INVOKE<R>(std::declval<Fn>(), std::declval<ArgTypes>()...) が未評価オペランドとして扱われた場合に整形式であり、かつ例外をスローしないことが分かっているかどうかを判定します。
Fn、R、またはパラメータパック ArgTypes 内の型がいずれも完全な型、(cv修飾された) void、または境界不明の配列ではない場合、動作は未定義です。
上記のテンプレートのインスタンス化が、直接的または間接的に不完全な型に依存し、その型が仮に完全になった場合にそのインスタンス化が異なる結果を生み出す可能性がある場合、動作は未定義です。
プログラムがこのページで説明されているテンプレートのいずれかに特殊化を追加する場合、動作は未定義です。
目次 |
[編集] ヘルパー変数テンプレート
| ヘッダ <type_traits> で定義 |
||
| template< class Fn, class... ArgTypes > inline constexpr bool is_invocable_v = |
(1) | (C++17以降) |
| template< class R, class Fn, class... ArgTypes > inline constexpr bool is_invocable_r_v = |
(2) | (C++17以降) |
| template< class Fn, class... ArgTypes > inline constexpr bool is_nothrow_invocable_v = |
(3) | (C++17以降) |
| template< class R, class Fn, class... ArgTypes > inline constexpr bool is_nothrow_invocable_r_v = |
(4) | (C++17以降) |
std::integral_constant から継承
メンバ定数
| value [static] |
(オーバーロード (1) の場合) INVOKE(std::declval<Fn>(), std::declval<ArgTypes>()...) が未評価オペランドとして扱われた場合に整形式であれば true、そうでなければ false (公開静的メンバ定数) |
メンバ関数
| operator bool |
オブジェクトを bool に変換し、value を返します。 (public member function) |
| operator() (C++14) |
value を返します。 (public member function) |
メンバ型
| 型 | 定義 |
value_type
|
bool |
type
|
std::integral_constant<bool, value> |
[編集] 備考
| 機能テストマクロ | 値 | 規格 | 機能 |
|---|---|---|---|
__cpp_lib_is_invocable |
201703L |
(C++17) | std::is_invocable, std::invoke_result |
[編集] 使用例
このコードを実行
#include <type_traits> auto func2(char) -> int (*)() { return nullptr; } int main() { static_assert(std::is_invocable_v<int()>); static_assert(not std::is_invocable_v<int(), int>); static_assert(std::is_invocable_r_v<int, int()>); static_assert(not std::is_invocable_r_v<int*, int()>); static_assert(std::is_invocable_r_v<void, void(int), int>); static_assert(not std::is_invocable_r_v<void, void(int), void>); static_assert(std::is_invocable_r_v<int(*)(), decltype(func2), char>); static_assert(not std::is_invocable_r_v<int(*)(), decltype(func2), void>); }
[編集] 関連項目
| (C++17)(C++23) |
任意の呼び出し可能 (Callable)オブジェクトを所与の引数で呼び出す (戻り値の型を指定することも可能)(C++23以降) (関数テンプレート) |
| (C++11)(C++20で削除)(C++17) |
呼び出し可能オブジェクトを引数のセットで呼び出した結果の型を推論する (クラステンプレート) |
| (C++11) |
評価されない文脈で使用するために、テンプレート型引数のオブジェクトへの参照を取得する (関数テンプレート) |
| (C++20) |
呼び出し可能型が、与えられた一連の引数型で呼び出し可能であることを規定する (コンセプト) |