On Thursday, 17 September 2015 at 18:40:56 UTC, Adam D. Ruppe
wrote:
I would actually just make it required or do separate functions
with it. Optional and variadics don't mix well together.
(You could also loop through and look for a bool argument
yourself but that is a bit messier.)
It's a result of dealing with the sum function. The seed
parameter will override the type. So for instance one option is
to do something like
auto test(T)(T x, bool sample=true, T seed=T.init)
ignoring the complexity of T.init being a nan for some types, it
would also overrule some of the behavior of sum. For instance, if
you do sum(x) where x is a dynamic array of floats, then the
result is a double instead of a float.
I think I could figure out how to look through the arguments for
a bool, but wouldn't that make me give up the default value for
the bool?
Maybe it would require, doing one version of the function defined
like
auto test(T)(T x, bool sample=true)
and then another like
auto test(T, U ...)(T x, U y)
I could then try to use static ifs to ensure some of the other
requirements (like a restriction on length so that it's not
called if there is only one argument in y). I probably don't even
need to loop, I can just static if that the first one in y is a
bool and the second is numeric.