A while ago there was a suggestion by Andrei to incorporate this sort of syntax: template ElementType(T : T[]) { alias ElementType = T; } struct Foo(T) { alias Type = T; } I think people agreed it was a nice syntax, but I don't know if anyone tried to implement it.