Is there a trait (or a combination of traits) that gives me the
constraints of a template?
Example:
```D
void f(T1 : long, T2 : const(char)[])(T x) { }
template constraintsOf(alias templ) { /*Magic here*/ }
alias constraints = constraintsOf!f; // tuple(long, const(char)[])
```
At the moment, I care about constraints that are types. I don’t
care about value or alias constraints (e.g. `opBinary(string op :
"+")(..)` or `f(alias x : something)()`, but if it works for
types, it should probably work for other constraints as well.
For what I want, `constraintsOf` may expect every template
parameter to be a type and to have a constraint.