use template inheritance