2016-12-06 5 views

ответ

4

Просто снимите указатель и проверьте результат функции.

Вот пример кода:

#include <utility> 
#include <iostream> 


template<class T> constexpr bool foo() { 
    using T2 = std::remove_pointer_t<T>; 
    return std::is_function<T2>::value; 
} 


int main() { 
    std::cout << "Is function? " << foo<void (int)>() 
       << "; is function pointer? " << foo<int (*)()>() << "\n"; 

} 
+0

является указателем на функцию от ссылки точно так же, как и обычный указатель ?? 'int (* f)()' de-referenced как '* f()' ?? – WARhead

+0

@WARhead, не разыгрывайте его. Используйте 'remove_pointer_t', как показано выше. – SergeyA

+0

все в порядке. я буду использовать 'remove_pointer_t' – WARhead