If all your arguments are of the same type you can use an initializer list while if your arguments have different types you have to use a recursive variadic function:
One risk with your approach is an empty parameter pack which would run up against a size 0 C-style array which the standard disallows though some compliers don't. std::array would allow 0 size though