templates are just functions