On Monday, 20 June 2016 at 14:28:06 UTC, Jacob Carlborg wrote:
On 2016-06-19 12:43, Dicebot wrote:
Yes. It is necessary because runtime parameter list is
variadic -
template bloat in such cases is usually eliminated by
forwarding to
another private method immediately turning file/line into
first runtime
argument instead.
Would it be a bad idea to allow this in the compiler:
void foo(Args...)(Args args, string file = __FILE__, size_t
line = __LINE__);
It wouldn't be possible to pass "file" or "line" when calling
"foo". But it's useful for the special default values, __FILE__
and __LINE__.
I think it would be good idea to take this even further:
T4 foo(T4, T0, T1, Ts..., T2, T3)(T0 t0, T1 t1, Args args, T2 t2,
T3 t3)
In other words, I think that the limitation that variadic
template parameter list must be at the end of the function
parameters is arbitrary and just a deficiency of the current
implementation.
A fixed number of parameters proceeding or following a variadic
list should all work equally well, even in combination with IFTI.
BTW, Ruby also allows to define methods with such parameters:
foo(first_arg, *middle_arguments, last_arg)