Здравствуйте, andyp, Вы писали:
A>Спасибо! У меня без decay_t не работало.
Ай блин,
чаинки еще не утонули не все так безоблачно. Для произвольного невызываемого типа мой вариант валится по ошибке компиляции, вместо того, чтобы вычислиться в false. Придется все-таки прикрутить SFINAE:
http://coliru.stacked-crooked.com/a/131b84dd7522caf9
template <typename T, typename = bool>
struct is_predicate : std::false_type {};
template <typename T>
struct is_predicate<T, std::decay_t<typename decltype(std::function(std::declval<T>()))::result_type>> : std::true_type {};
Но и так неплохо, по-моему.