Цель совершенной пересылки для аргумента 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;
};