templates, params and specialization