関数があり、特定の型の引数を渡すことができるかどうかをテストする必要があります。例えば:
template<typename T, auto F>
decltype(F(declval<T>{})) foo();
呼び出しfoo<int, bar>()
は次の 2 つのことを行います。
- の戻り値の型を
foo
と同じ戻り値の型に設定しますbar
bar
型の引数を受け入れる関数であることを確認しますT
残念ながら、auto
テンプレートの種類にアクセスすることはできませんが、これらの両方を実現したいと考えています。私が必要としているのはdecltype
、関数ポインタ用です。これにより、次のようなことができます。
template <typename T, typename F>
decltype(declval<F>(declval<T>{})) foo();
そのため、引き続き呼び出しfoo<int, bar>()
て同じ結果を得ることができました。もちろんdeclval
、関数ポインタには for はありません。しかし、これを達成できる別の方法はありますか?