Просто добавьте еще один параметр шаблона, который по умолчанию используется для элемента type
черты, например
template<typename trait, typename arg_t = typename base_trait<trait>::thetype>
void fn(arg_t arg) {
}
, или, если вы хотите сохранить тип черты, вы можете использовать
template<typename trait, typename tr = base_trait<trait>>
void fn(typename tr::thetype arg) {
}
иливы можете получить как с
template<typename trait,
typename tr = base_trait<trait>,
typename arg_t = typename tr::thetype>
void fn(arg_t arg) {
}