You use std::forward with && for perfect forwarding. As the type of Args is unknown, don't pass by value as a copy constructor may not be available or if it is it may be operationally 'expensive'. When having an arg that is passed as an arg to another then rule of thumb is to have the arg as && and use std::forward.