On Tuesday 06 October 2015 22:01, Nick Sabalausky wrote: > Ok, D-style varargs can accept a parameter length of zero: > > --------------- > void foo(T...)(T args) { > //... > } > foo(); > foo(t1, t2); > ---------------
Terminology fun: The spec uses the term "D-style variadic function" for something else yet: `int abc(char c, ...);` -- http://dlang.org/function.html#variadic Yours is technically a "variadic function template", I guess, i.e., a function template that's variadic, not a template of a variadic function. > Is there any way to stick a param with a default value before that? > > --------------- > void foo(T...)(string str=null, T args=/+what goes here???+/) { > //... > } > foo(); > foo(str); > foo(str, t1, t2); > --------------- > > Obviously this can be worked around easily enough by splitting it into > two overloads ("foo(string str=null)" and "foo(string str, T args)"), > but is there a way to do it in one? You can put an expression tuple ("expression AliasSeq"??) there. T.init is one that always fits T's types. But you could generate one with different values, too. ---- void foo(T...)(string str=null, T args = T.init) { //... } void main() { foo(); foo(""); foo("", 1, 2); } ----