template functuon