Как показано в "возможной реализации" std::apply
, мы видим, что стандартная библиотечная функция std::invoke
используется для вызова вызываемого объекта F
.
Нужно ли в этой ситуации? если да, то по какой причине?
Каковы преимущества написания:
template<typename F, typename ... Args>
decltype(auto) func(F &&f, Args &&... args){
return std::invoke(std::forward<F>(f), std::forward<Args>(args)...);
}
над
template<typename F, typename ... Args>
decltype(auto) func(F &&f, Args &&... args){
return std::forward<F>(f)(std::forward<Args>(args)...);
}
?