Phobos: __FILE__ as template default parameter

ZombineDev via Digitalmars-d digitalmars-d at puremagic.com
Tue Jun 21 08:49:38 PDT 2016


On Tuesday, 21 June 2016 at 10:34:01 UTC, pineapple wrote:
> On Tuesday, 21 June 2016 at 10:28:03 UTC, pineapple wrote:
>> On Tuesday, 21 June 2016 at 02:59:44 UTC, ZombineDev wrote:
>>> 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.
>>
>> I don't disagree with you, but this is a separate issue. If 
>> the arguments trailing Args have default values (as they would 
>> in the case of __FILE__, __LINE__) it will create ambiguity.
>>
>> void foo(Args...)(Args args, int n = 1);
>>
>> What happens if I do this? foo(1, 2, 3, 4); Is n 1 or 4?
>
> Another thought: What if in this case the trailing arguments 
> are always the default value? In this case n is /always/ 1, 
> file and line would always be __FILE__ and __LINE__. This would 
> be a more general solution and maybe not too intolerably ugly.

It should work just like the regular expression .*.? - if all 
parameters after the variadic list have default values, then the 
list should capture all arguments and the last parameters use 
their default values. E.g. args is (1, 2, 3, 4) and n is 1 in 
your example.
In general the strategy should be: the variadic list captures as 
much arguments as its constraints allow it to capture.

// regex: (\d*)(.)(.?)
// (pretend that \d means scalar type)
void foo(T1, T2, Args...)(Args args, T1 t1, T2 t2 = "default"w)
     if (allSatisfy!(isScalarType, Args))
{
     pragma (msg, Args, ", ", T1, ", ", T2);
}

foo(0, 0L, "asd");       // (int, long), string, wstring
foo("asd", "sdf");       // (), string, string
foo('c', new Object, 3); // (char), Object, int



More information about the Digitalmars-d mailing list