Цель совершенной пересылки для аргумента Callable в выражении вызова?

В книге Скотта МейераЭффективный Современный C ++ на стр. 167 (из печатной версии) он приводит следующий пример:

auto timeFuncInvocation = [](auto&& func, auto&&... params) {
  // start timer;
  std::forward<decltype(func)>(func)(
    std::forward<decltype(params)>(params)...
  );
  // stop timer and record elapsed time;
};

Я полностью понимаю идеальную пересылкуparams, но мне непонятно, когда совершенная пересылкаfunc будет когда-либо актуальным. Другими словами, каковы преимущества вышеперечисленного над следующим:

auto timeFuncInvocation = [](auto&& func, auto&&... params) {
  // start timer;
  func(
    std::forward<decltype(params)>(params)...
  );
  // stop timer and record elapsed time;
};

Ответы на вопрос(1)

Ваш ответ на вопрос