use variadic templates