import std.stdio; template Print(A ...) { void print() { foreach(byte a; A) { writefln(a); } } } void main() { Print!(1,'a',"str",6.8).print(); } dmd compiles this code with no error. Shouldn't it be an error to declare a as byte?