Фрагмент кода, который я видел в Effective Modern С++, имеет умную реализацию обоснования инструментария, чтобы создать таймер функции:
auto timeFuncInvocation = 
    [](auto&& func, auto&&... params)
    {
        start timer; 
        std::forward<decltype(func)>(func)(
            std::forward<decltype(params)>(params)...); 
        stop timer and record elapsed time; 
    };
Мой вопрос о std::forward<decltype(func)>(func)(...
- По моему мнению, мы фактически отбрасываем функцию до ее первоначального типа, но зачем это нужно? Похоже, что простой вызов будет делать трюк.
- Есть ли другие случаи, когда мы используем совершенную переадресацию для вызова функции?
Это выглядит как хороший вариант использования использования знакомого синтаксиса шаблонов в лямбда-выражениях, если мы хотим сделать тип таймера постоянной времени компиляции.
