Синтаксис C ++, унаследованный от C, странный, нелогичный и архаичный. Вам нужен typefef, чтобы справиться с фактом.
int (*retFun())(int) { ... }
откровенно нечитаемый беспорядок.
Новый вариант синтаксиса C ++ несколько облегчает проблему.
auto retFun () -> auto (*)(int) -> int {
return [](int x) { return x; };
}
Новый синтаксис пишется в основном слева направо, как можно было бы прочитать.
auto retFun
"retFun is ..."
() ->
"... функция, которая не принимает аргументов и возвращает ..."
auto (*)
"... указатель на ..."
(int) ->
"... функция, которая принимает аргумент int и возвращает ..."
int
"... int".
Подробнее о объявлениях функций .