most of recursive templates suppressed and replaced by template argument
pack expansions