On 08/15/13 14:44, Tommi wrote: [...] > No, I'm not asking A -> C, I'm just asking that int[3] convert to int[].
>From you earlier post: Ret bar(R)(R r) // [6] if (std.range.isInputRange!R) { return Ret.input_range; } You'd like to be able to call 'bar' with a static array. Currently you can't, because 'R' becomes a /static array/, hence not a input range. Note that Ret baz(R)(R[] r) // [6] if (std.range.isInputRange!(R[])) { return Ret.input_range; } /would/ work. This case works, because 'baz' expects a dynamic array and static arrays implicitly convert to dynamic ones - so if there is no better fitting overload then the static->dynamic conversion will be done. To make your case work, it would be necessary to first deduce R==int[3], then try instantiating the template, and if this fails retry with whatever int[3] implicitly converts to (int[] in this case). The only alternative is making the static->dynamic array conversion /mandatory/ when deducing types - which is not a good idea either. The implicit int[3] -> int[] conversion should not exist. artur