I've always hated that aspect of specialization. I don't really understand why it's valid (how can T be T[]?)
I totally agree with that, that confuses me as well.
This works: void TFoo(T : U[], U)(T a)
Oh cool, that's surprising to say the least. Thanks! This indeed works with argument deduction :)