#include <iostream>
using namespace std;

template <typename T>
bool mniejsze (T pierwszy , T drugi){
    if( pierwszy < drugi)
        return true;
    return false;
}

template <typename T>
bool wieksze (T pierwszy, T drugi){
    if( pierwszy > drugi )
        return true;
    return false;
}

template<typename T>
struct f {
    typedef bool( *type)( T, T );
};

template<typename T>
T minmax(T a[], int n, bool b, typename f<T>::type fp ){ 
	if ( fp( a[0], a[1])) return 1;
	return -1;
}

int main() {
	// your code goes here
	f<int>::type  f1 = mniejsze<int>;
    bool b = f1( 3, 4);
    int a[] = { 3, 4};
    std::cout << minmax<int>( a, 0, 0, f1);
	return 0;
}