Мне нужно выяснить, имеет ли тип выдачи функцию X в качестве вызываемой функции с заданным списком параметров. Проверка должна не заботиться о возврате ценности однако.Как узнать, имеет ли тип функция-член с любым типом возврата?
Я нашел this solution от another Stack Overflow question который, кажется, хорошо работает. Что она делает это:
#include <type_traits>
template <typename C, typename F, typename = void>
struct is_call_possible : public std::false_type {};
template <typename C, typename R, typename... A>
struct is_call_possible<C, R(A...),
typename std::enable_if<
std::is_same<R, void>::value ||
std::is_convertible<decltype(
std::declval<C>().operator()(std::declval<A>()...)
), R>::value
>::type
> : public std::true_type {};
Это именно то, что я хочу, за исключением того, что в чеке вы также поставить нужный тип возвращаемого значения. Я пытался найти способ изменить это, чтобы иметь возможность проверять, не принимая во внимание тип возврата, но я не мог понять способ.
Кто-нибудь знает, как это сделать?
так по существу вы хотите проверить, является ли функция будет 'возврат' 'недействительным 'или нет? – Valerij