#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
}