refactored type_list to use variadic templates