#include <iostream>
#include <type_traits>
using namespace std;
int main()
{
int (*a1)(int) = nullptr;
int (*a2)(const int) = nullptr;
int (* const a3)(int) = nullptr;
cout << is_same<decltype(a1), decltype(a2)>::value << " "
<< is_same<decltype(a1), decltype(a3)>::value << endl; //1 0
int (*b1)(int *) = nullptr;
int (*b2)(int [100]) = nullptr;
const int (*b3)(int *) = nullptr;
cout << is_same<decltype(b1), decltype(b2)>::value << " "
<< is_same<decltype(b1), decltype(b3)>::value << endl; //1 0
int (*c1)(int, long(char, int [5][10])) = nullptr;
int (*c2)(const int, long(const char, int (*)[10])) = nullptr;
int (* const c3)(int, long(char, int [5][10])) = nullptr;
cout << is_same<decltype(c1), decltype(c2)>::value << " "
<< is_same<decltype(c1), decltype(c3)>::value << endl; //1 0
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIAp7CglpbnQgKCphMSkoaW50KSA9IG51bGxwdHI7CglpbnQgKCphMikoY29uc3QgaW50KSA9IG51bGxwdHI7CglpbnQgKCogY29uc3QgYTMpKGludCkgPSBudWxscHRyOwoJY291dCA8PCBpc19zYW1lPGRlY2x0eXBlKGExKSwgZGVjbHR5cGUoYTIpPjo6dmFsdWUgPDwgIiAiIAoJCSA8PCBpc19zYW1lPGRlY2x0eXBlKGExKSwgZGVjbHR5cGUoYTMpPjo6dmFsdWUgPDwgZW5kbDsgLy8xIDAKCglpbnQgKCpiMSkoaW50ICopID0gbnVsbHB0cjsKCWludCAoKmIyKShpbnQgWzEwMF0pID0gbnVsbHB0cjsKCWNvbnN0IGludCAoKmIzKShpbnQgKikgPSBudWxscHRyOwoJY291dCA8PCBpc19zYW1lPGRlY2x0eXBlKGIxKSwgZGVjbHR5cGUoYjIpPjo6dmFsdWUgPDwgIiAiIAoJCSA8PCBpc19zYW1lPGRlY2x0eXBlKGIxKSwgZGVjbHR5cGUoYjMpPjo6dmFsdWUgPDwgZW5kbDsgLy8xIDAKCgoJaW50ICgqYzEpKGludCwgbG9uZyhjaGFyLCBpbnQgWzVdWzEwXSkpID0gbnVsbHB0cjsKCWludCAoKmMyKShjb25zdCBpbnQsIGxvbmcoY29uc3QgY2hhciwgaW50ICgqKVsxMF0pKSA9IG51bGxwdHI7CglpbnQgKCogY29uc3QgYzMpKGludCwgbG9uZyhjaGFyLCBpbnQgWzVdWzEwXSkpID0gbnVsbHB0cjsKCWNvdXQgPDwgaXNfc2FtZTxkZWNsdHlwZShjMSksIGRlY2x0eXBlKGMyKT46OnZhbHVlIDw8ICIgIiAKCQkgPDwgaXNfc2FtZTxkZWNsdHlwZShjMSksIGRlY2x0eXBlKGMzKT46OnZhbHVlIDw8IGVuZGw7IC8vMSAwCn0=