Another attempt at type_traits