template polymorphic_type