Trouble creating a formatted assert wrapper
Chris Nicholson-Sauls
ibisbasenji at gmail.com
Mon Sep 3 04:18:03 PDT 2012
On Monday, 3 September 2012 at 09:24:42 UTC, Peter Alexander
wrote:
> On Monday, 3 September 2012 at 09:15:08 UTC, Chris
> Nicholson-Sauls wrote:
>> On Sunday, 2 September 2012 at 23:40:01 UTC, Peter Alexander
>> wrote:
>>>
>>> Consider:
>>>
>>> myAssert(false, "%d", 1);
>>>
>>> What is Args? "%d", 1 could refer to the optional arguments,
>>> or the variadic arguments. Both match.
>>
>> Easy: the variadic arguments are not, themselves, optional.
>> Match the variadic. This kind of problem is already solved in
>> every language with "scattering" assignments, and other such
>> features.
>
> The variadic arguments are optional, as you can have zero
> arguments count as variadic.
>
> Also, how can I override the optional arguments in this
> function if all arguments are matched as variadic?
They are not really optional. That the language fails to enforce
this (or provide an eforcement, rather) is a shortcoming.
Pretending for a moment that D supports one of two things:
1) Empty array stands in for empty variadic. Then, given
arguments like func(R, V..., O=D) you would call it with
func(foo, [], bar). Since a typesafe variadic is effectively a
sugar-laden array (well a tuple really), I see no reason this
shouldn't be feasible. First-class tuples would likely be even
better.
2) Named parameters. Then it's func(foo, O: bar), and the
variadic argument can indeed be optional, although the meaning is
no different than in (1).
In reality, though, we have neither of these things. Even so,
how often does this actually arise in practice (never has for
me)? And given the OP's specific case (__FILE__ and __LINE__
params) I don't foresee any useful case for overriding the
defaults.
Honestly, I sometimes think that the special treatment of
__FILE__ and __LINE__ when used as defaults was not the best way
to go. It might've been better implemented as hidden params,
only generated by the compiler when actually used in the body.
More information about the Digitalmars-d
mailing list