Я не понимаю значения F f=F()
[...]
Таким образом, вы предоставляете аргумент по умолчанию для параметра функции в C ++. Так же, как мы делаем, любые нормальные функции;скажем
void func1(int i = 2) {/*do something with i*/}
// ^^^^^^^^^
void func2(int i = int()) {/*do something with i*/}
// ^^^^^^^^^^^^^
void func3(int i = {}) {/*do something with i*/}
// ^^^^^^^^^^
, который позволяет вызывать вышеуказанные функции с аргументом
func1(1); //---> i will be initialized to 1
func1(2); //---> i will be initialized to 2
func1(3); //---> i will be initialized to 3
или без предоставленного аргумента.
func1(); //---> i will be initialized to 2
func2(); //---> i will be initializedto 0
func3(); //---> i will be initialized to 0
Аналогичным образом compare
можно вызывать без третьего параметра, например
compare(arg1, arg2) // ---> f will be `std::less<T>` here, which is the default argument
или с третьим параметром
compare(arg1, arg2, [](const auto& lhs, const auto& rhs){ return /*comparison*/;});
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ some comparison function here