This works too: void abc(T, U=void)(T parm1) { writeln("simpleparm: ", parm1); } void abc(T:U[],U)(T parm1) { writeln("array : ", parm1); } void main(string[] args) { abc(1); abc("str"); int[] arr = [1, 2]; abc(arr); }