Здравствуйте, andyp, Вы писали:
A>Ну да
У std::function есть конструктор, жрущий invokable. Типы аргументов оно само должно вывести при инстанциировании. Остается проверить тип, возвращаемый функцией. Я немного подредактировал предыдущий ответ пока ты отвечал.
Да, эта идея мне нравится. Получается органично и компактно:
http://coliru.stacked-crooked.com/a/e397bfcb155981b0
template <typename T>
using is_predicate = std::is_same<bool, std::decay_t<typename decltype(std::function(std::declval<T>()))::result_type>>;
Не очень привычна пока еще эта фишка, когда параметры шаблона класса выводятся по фактическим параметрам конструктора. Будем надеяться, что подобные конструкции не будут вызывать трудностей у компиляторов.