On Saturday, October 29, 2011 08:24:29 J Arrizza wrote: > I have a template that I'd like to have a specialization for arrays. > Initiall I need it to work for byte arrays, but I'd like to make it > eventually work for all arrays. The page > http://d-programming-language.org/template says to use > > template TFoo(T : T[]) { ... } // #2 > > > but when I try it, it doesn't quite work: > > template abc(T) > { > void abc(T parm1) > { > writeln("simpleparm: ", parm1); > } > } > > template abc(T: T[]) > { > void abc(T parm1) > { > writeln("array : ", parm1); > } > } > > > void main(string[] args) > { > abc(1); > abc("str"); > int[] arr = [1, 2]; > abc(arr); > } > > > The output is: > > simpleparm: 1 > simpleparm: str > simpleparm: [1, 2] > > > Which is not what I want, it needs to be the specialized template for > arrays. Note, this doesn't work either: > > template abc(T: T[]) > { > void abc(T[] parm1) > { > writeln("array : ", parm1); > } > }
Use std.traits.isDynamicArray in a template constraint. eg. void abc(T)(T parm1) if(isDynamicArray!T) { } - Jonathan M Davis