2017-05-30 6 views
2

Comment puis-je vérifier si une fonction membre n'est pas callable en C++ 17?std :: is_nothrow_invocable avec la fonction membre

Je sais que ma classe C a une fonction membre avec le nom f et que vous voulez savoir si elle est nothrow callable avec un int comme argument.

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

Répondre

2

Vous pouvez utiliser une des options suivantes:

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

ou

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

Note: vous avez besoin d'une instance pour appeler la fonction membre.

+0

La première solution est correcte, j'ajoute des messages d'erreur dans mon post original pour le second. –

+0

Deuxième version corrigée. Manquant 'decltype'. – Jarod42

+0

Parfait, merci! –