This was CWG issue 1558. The unspecified part was treatment of unused arguments in an alias template. In GCC < 5.0 the unused arguments can't result in a substitution failure, hence void_t
fails to verify your functor call, and tries to instantiate a class template specialization, which results in a hard error.
A workaround for GCC (< 5.0) is the following implementation:
template <typename...>
struct voider
{
using type = void;
};
template <typename... Ts>
using void_t = typename voider<Ts...>::type;
DEMO