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.

Reply via email to