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)


Reply via email to