On Friday, 19 July 2013 at 17:25:34 UTC, JS wrote:
BTW, I'd like to have a default value for d. That or efficiently
allow for variadic d, which then the default delim could easily
be tested for.
To answer your previous question about shadowing, you are
probably experiencing an old bug where you can't overload a
template and non-template. This was fixed in HEAD, but is not yet
available in a packaged version (eg, it is not in 2.063.2).
The standard workaround is declaring your function as a
"parameter-less parameterized function (!)"
string[] split()(string s, string d); //This is actually a
template.
If you want d to be variadic, while still having a default case,
any number of solutions are available, including simply doing
this:
string[] split()(string s); (1*)
string[] split(Args...)(string s, Args args); (2)
(1) is "more specialized" (I think), so will be considered the
better match for "split("hello")". IF I'm wrong, simply add "if
(Args.length > 0)" as a template restriction for the second
function, and you are good to go.
If you have access to head, then declare (1) as a straight up
function. In that case, it most certainly *will* be the better
match.