2017-05-30 3 views
2

Wie kann ich überprüfen, ob eine Memberfunktion in C++ 17 nicht aufrufbar ist?Std :: is_nothrow_invocable mit Member-Funktion

Ich weiß, meine Klasse C hat eine Member-Funktion mit dem Namen f und möchte wissen, ob es nothrow mit einem int als Argument aufrufbar ist.

#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 >); 
} 

Antwort

2

Sie können eine der folgenden Optionen verwenden:

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

oder

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

Hinweis: Sie müssen eine Instanz Memberfunktion aufzurufen.

+0

Die erste Lösung ist korrekt, ich füge Fehlermeldungen in meinem ursprünglichen Beitrag für die zweite. –

+0

Zweite Version behoben. Fehlender 'decltype'. – Jarod42

+0

Perfekt, danke! –

Verwandte Themen