Вы знаете, мы можем обернуть или сохранить лямбда-функцию в std::function:
#include <iostream>
#include <functional>
int main()
{
    std::function<float (float, float)> add = [](float a, float b)
    //            ^^^^^^^^^^^^^^^^^^^^
    {
        return a + b;
    };
    std::cout << add(1, 2) << std::endl;
}
Мой вопрос вокруг std::function, так как вы можете видеть, что это класс шаблона, но он может принимать любую  подпись функции.
Например float (float, float) в этом виде return_value (first_arg, second_arg).
Какова структура std::function и как она принимает подпись функции, например x(y,z) и как она работает с ней? Является ли float (float, float) новое допустимое выражение в С++?