I really want to pass a variable that is auto (function) as input in another function.
Here is a structure that receives parameters for my xroot f:
struct my_f_params { 
    double flag; 
    auto inter_auto(double x, double y);
};
Here is the function I essentially want to have (it's based on a GSL library, so the form can't be changed). I want to be able to pass a "function" as a variable, and the only way I guessed it would happen is with auto.
After passing it, I try storing it to a new auto, But I get an error (see below):
double xrootf (double x, void * p)
{
    my_f_params * params = (my_f_params *)p;
    double flag = (params->flag);
    auto inter_auto = (params->inter_auto);    
    return flag*inter_auto(x);
}
Here is an auto function that returns an auto function. This works perfectly (if xrootf is commented, I can print for example new_f(2)(2), etc):
auto new_f(double x){
    auto in_result = [](double x, double y){
        return x*y;
    };
    using namespace std::placeholders;
    auto result_f = std::bind(in_result,x,_1);
    
    return result_f;
}
The test code that proves that the auto function new_f is working good:
int main(int argc, char const *argv[])
{
    auto nest_f = new_f(-0.5);
    printf("%f\n", nest_f(+2));
    return 0;
} 
Recasting the auto function to double is not working, either (for the struct part of the code).
The error I'm getting is:
auto_pass.cpp: In function 'double xrootf(double, void*)':
auto_pass.cpp:28:42: error: unable to deduce 'auto' from 'params->my_f_params::inter_auto'
28 |     auto inter_auto = (params->inter_auto);
   |                                          ^
auto_pass.cpp:28:42: note:   couldn't deduce template parameter 'auto'
The aim of the code is this:
- Have a function that is able to return a function (DONE W/ new_f) 
- Have a function that is able to take a function as a variable (the one with new_f) (Not Done) 
EDIT: Here's a quick Python script that's very easy to achieve what I'm saying:
def new_f(y):
    #make any number of computatioanly costly Algebra with y
    def g(x):
        return x*y
    return g
def xroot(f,flag):
    return flag-f(flag)
 
    