On Monday, October 10, 2011 22:55 Norbert Nemec wrote: > Even worse for template arguments. My first idea (inspired by C++, also > suggested by kennytm) > > template(T,int N) myfunc(T[N] arg) > > does not work in D and I could not find any alternative way to allow > writing > > myfunc([1,2,3,4])
It does if you pass it an actual static array. For instance, std.bitmanip.bigEndianToNative has a similar declaration. The problem with your example stems from the fact that the literal is a dynamic array, and the compiler fails to take the implicit conversion into account when instantiating the template. So, for instance myfunc(cast(int[4])[1, 2, 3, 4]); works. Obviously, that's not really what you're looking for, but the templated function is just fine. It's just that template instantiation is very exact and doesn't do much (if anything) in the way of conversions. - Jonathan M Davis
