#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(){}
I2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKc3RydWN0IFh7CiAgYm9vbCBvcGVyYXRvcigpKGludCAoJiZhcnIpWzNdKTsKICBsb25nIG9wZXJhdG9yKCkodm9pZCopOwp9OwoKLy8gWCB4OyB4KGFsaWFzPGludFtdPnsxLDIsM30pOyAtLSB3aWxsIGNhbGwgZmlyc3Qgb3ZlcmxvYWQKc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8c3RkOjpyZXN1bHRfb2Y8WChpbnRbM10pPjo6dHlwZSwgYm9vbD4oKSwgIi9jcnkiKTsKc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUoc3RkOjpkZWNsdmFsPFg+KCkoc3RkOjpkZWNsdmFsPGludFszXT4oKSkpLCBsb25nPigpLCAiL3lheSIpOwoKaW50IG1haW4oKXt9