/////////////////////////////////////////////////////
// FcnArg.cpp -- Passing a Function as an Argument //
/////////////////////////////////////////////////////

#include <iostream>

using namespace std;


int Max(int arg1, int arg2)
{
    return (arg1 >= arg2) ? arg1 : arg2;
}

int Min(int arg1, int arg2)
{
    return (arg1 <= arg2) ? arg1 : arg2;
}

int Doit(int (*fcn)(int, int), int arg1, int arg2)
{
    return fcn(arg1, arg2);     // call using function pointer
    // could equally well say:  return (*fcn)(arg1, arg2);
}

int main()
{
    cout << "\nPassing a Function as an Argument\n\n";

    cout << "Max(17,42) = " << Doit(Max, 17, 42) << endl;
    cout << "Min(17,42) = " << Doit(Min, 17, 42) << endl;

    cout << endl;
    return 0;
}
