2017-05-30 5 views
2

メンバー関数がC++で呼び出し可能でないかどうかを確認する方法17std :: is_nothrow_invocable with member function

クラスCには、名前がfのメンバー関数があり、引数としてintを呼び出すことができないかどうかを知りたいと思っています。

#include <type_traits> 

struct C{ 
    void f(int){} 
}; 

int main(){ 
    // How to use is_nothrow_invocable_v??? 
    static_assert(std::is_nothrow_invocable_v< &C::f, int >); 
} 

答えて

2

次のいずれかを使用する可能性があります:

noexcept(std::declval<C>().f(42)) 

または

std::is_nothrow_invocable_v<decltype(&C::f), C, int> 

注:あなたは、メンバ関数を呼び出すためにインスタンスを必要としています。

+0

最初の解決策は正しいです、私は2番目のものの私の元の投稿にエラーメッセージを追加します。 –

+0

第2版が修正されました。 'decltype'がありません。 – Jarod42

+0

パーフェクト、ありがとう! –