#include <iomanip>
#include <iostream>
#include <type_traits>
using namespace std;
template <typename T>
using function_ptr = typename std::add_pointer<typename std::enable_if<std::is_function<T>::value,T>::type>::type;
namespace detail{
template<typename T, std::size_t S>
struct array_helper{
typedef T type[S];
};
template<typename T>
struct array_helper<T,0>{
typedef T type[];
};
}
template <typename T, std::size_t S = 0>
using c_array = typename detail::array_helper<T,S>::type;
int main(int /*argc*/, c_array<char*> /*argv*/)
{
typedef char*(*(*t1)(int (*)(char* , char* )))[];
typedef function_ptr<c_array<char*>*(function_ptr<int(char*,char*)>)> t2;
cout << boolalpha << is_same<t1,t2>::value << endl;
return 0;
}
I2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgp1c2luZyBmdW5jdGlvbl9wdHIgPSB0eXBlbmFtZSBzdGQ6OmFkZF9wb2ludGVyPHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZnVuY3Rpb248VD46OnZhbHVlLFQ+Ojp0eXBlPjo6dHlwZTsKCgpuYW1lc3BhY2UgZGV0YWlsewoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgUz4Kc3RydWN0IGFycmF5X2hlbHBlcnsKCXR5cGVkZWYgVCB0eXBlW1NdOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IGFycmF5X2hlbHBlcjxULDA+ewoJdHlwZWRlZiBUIHR5cGVbXTsKfTsKCn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBTID0gMD4KdXNpbmcgY19hcnJheSA9IHR5cGVuYW1lIGRldGFpbDo6YXJyYXlfaGVscGVyPFQsUz46OnR5cGU7CgoKaW50IG1haW4oaW50IC8qYXJnYyovLCBjX2FycmF5PGNoYXIqPiAvKmFyZ3YqLykKewoJdHlwZWRlZiBjaGFyKigqKCp0MSkoaW50ICgqKShjaGFyKiAsIGNoYXIqICkpKVtdOwoJdHlwZWRlZiBmdW5jdGlvbl9wdHI8Y19hcnJheTxjaGFyKj4qKGZ1bmN0aW9uX3B0cjxpbnQoY2hhciosY2hhciopPik+IHQyOwoKCWNvdXQgPDwgYm9vbGFscGhhIDw8IGlzX3NhbWU8dDEsdDI+Ojp2YWx1ZSA8PCBlbmRsOwoJcmV0dXJuIDA7Cn0K