Function measuring time of another function
The big thing you're missing here is perfect forwarding. When you receive the argument pack, it may contain one or more rvalue references. But when you pass args... to the function you're timing, you've given a name to the pack, so even though what you received were rvalue references, what you end up passing to the timed function won't be an rvalue reference any more.
To fix this, you'd use std::forward:
function(std::forward&lt;ArgsT&gt;(args)...);

The other obvious addition I'd consider would be gathering and returning the return values from the calls you make. One possibility would be to return something like a pair&lt;double, std::vector&lt;output&gt;&gt;, to hold the time and the return values.