How would i use enable_if to disable the constructor if the function passed into the template does not contain valid arguments.
template <typename SrcType>
using is_Valid_Ret_Type = std::bool_constant<
std::is_same<SrcType, void>::value |
std::is_same<SrcType, int>::value>;
template <typename SrcType>
using is_Valid_Arg_Type = std::bool_constant<
std::is_integral<SrcType>::value /*|
std::is_same<SrcType, float>::value*/>;
template<typename Fn> class FunctionBase;
template<typename R, typename... Args>
class FunctionBase <R(__cdecl*)(Args...)>
{
// ......
};
template <auto F>
class Function : public FunctionBase<decltype(F)> {
public:
template <typename R, typename... Args>
static R return_type_of(R(*)(Args...)) {};
template<
typename = std::enable_if_t<is_Valid_Ret_Type<decltype(return_type_of(F))>::value>,
typename = std::enable_if_t<(is_Valid_Arg_Type<Args>::value&& ...)>> // how do I do this
Function() : FunctionBase<decltype(F)>() { }
};