support template defined types