Как насчет попытки прямого подхода.
template<typename IgnoreMe, typename ...T>
auto UniversalHook(IgnoreMe && iamignored, T && ...args)
{
//I want to remove the first element of `args` here, how can I do that?
return CallToOtherFunction(std::forward<T>(args)...);
}
(также исправлено использование пересылочных ссылок и добавлено очевидное return
)