Obviously this is all very incomplete, but it's an idea I think is rather interesting.
You've seen this, right?
https://wiki.dlang.org/User:9rnsr/DIP:_Template_Parameter_ConstraintA small step in one such direction, influenced by C++ concepts. That proto-DIP also raises a question I always had about why D doesn't allow chained template instantiation, but that's another DIP for another time.