#include <type_traits>

struct X{
  bool operator()(int (&&arr)[3]);
  long operator()(void*);
};

// X x; x(alias<int[]>{1,2,3}); -- will call first overload
static_assert(std::is_same<std::result_of<X(int[3])>::type, bool>(), "/cry");
static_assert(std::is_same<decltype(std::declval<X>()(std::declval<int[3]>())), long>(), "/yay");

int main(){}