- using result = decltype(test{}(::std::declval<Args>()...));
- using type = typename std::is_convertible<typename result::_::type, Ret>::type;
+ using result = decltype(test{}(0, ::std::declval<Args>()...));
+ using type = std::integral_constant<bool,
+ std::is_convertible<typename result::_::type, Ret>::value
+ || std::is_same<Ret, void>::value>;