Podobne zadanie kiedyś pojawiło się w "Symfonii C++"! :D Jest ono jak dla mnie dosyć trudne (ale krótkie), więc podeślę Ci rozwiązanie (razem z zastosowaniem o.O):
#include <iostream>
// Zadeklarować wskaźnik do funkcji zwracającej wskaźnik do funkcji przyjmującej dwa
// argumenty typu double i zwracającej wartość typu int i przyjmującej jako argumenty
// referencje do typu double i wskaźnik do typu int
int foo(double, double) {
return 0;
}
int(*bar(double&, int*))(double, double) {
return &foo;
}
int main() {
// Deklaracja wskaźnika
int(*(*function)(double&, int*))(double, double) = &bar;
double dummy;
int (*result)(double, double) = function(dummy, nullptr);
result(0.0, 0.0);
}