Эээ...
Ну во-первых можно делать характеристики характеристик:
template<>
struct Trait<TraitA, TraitB> {...};
Во-вторых можно устанавливать значения по умолчанию для некоторой группы характеристик. Можно сделать обработку автоматом const и volatile случаи, если они совпадают с не const и volatile:
template <class type, class trait>
struct Trait<const type, trait>
{
typedef typename Trait<type, trait>::result result;
};
(Можно сделать характеристику характеристики, определяющую, верно ли это для данной характеристики)