title: What is the difference between std::invoke and std::apply?
body: <p>They are both used as a generic method of calling functions, member functions and generally anything that is callable. From cppreference the only real difference I see is that in <code>std::invoke</code> the function parameters (however many they are) are <code>forward</code>ed to the function, whereas in <code>std::apply</code> the parameters are passed as a <code>tuple</code>. Is this really the only difference? Why would they create a separate function just to handle <code>tuple</code>s?</p>