Looks like this might not be possible. The compiler would need to have some understanding of the fact that the type::Static constructor is injective, i.e. that the resulting Type uniquely determines the passed usize. Without this understanding, the compiler conservatively assumes that an expression like {Type::Static(D2)} might produce the same result for different values of D2, in which case there would be multiple conflicting implementations for the same trait bound.