#include <iostream>

using namespace std; // haters gonna hate

typedef char * charPtr;

typedef float (*crazyFunction)(float(*)(), float);

float bar()
{
    return 3.1415926535;
}

float foo(float(*func)(), float argument)
{
    return func() + argument;
}

int main()
{
    char * c1, c2, c3;
    c1 = NULL;
    c2 = 'a';
    c3 = c2;

    charPtr x1, x2, x3;
    x1 = NULL;
    x2 = x1;
    x3 = x1;

    float (*someCrazyFunction)(float(*)(), float) = foo; // WTF is this

    crazyFunction myCrazyFunction = foo; // easier to deal with

    cout << someCrazyFunction(bar, 1) << " " << myCrazyFunction(bar, 2) << endl;
    return 0;
}