@monarchdodra:
> Hum... Normally, when you start by calling buildPath("path1", "path") which mathces the variadic signature, but once you reach the body of the function, inside the argument becomes ["path1", "path"]. By then, calling buildPath(paths) again should this time match the ranged version. That works on my release anyways, and it doesn't seem to be ambiguous.

I know you've merged this now (thanks!), but please let me clarify what I meant.

The point is that `buildPath(paths)` is in principle a valid way to call both the range version and the variadic version. With D's typesafe variadics, you can also pass the array directly *as an array*. In other words, if the range version were removed, the variadic version would call itself recursively.

I know the compiler currently doesn't flag this as ambiguous. Maybe it is right not to, because when you actually instantiate the templates, you get something like this:

    string buildPath(string[]);    // Range version
    string buildPath(string[]...); // Variadic version

It guess it sort of makes sense that the former is considered a "more specialised" match in the overload resolution, but this does not seem to be mentioned in the language spec, and I felt it best to specify the template argument to avoid the (potential) ambiguity.