doubly-lazy variadics?
Bruno Medeiros
brunodomedeiros+spam at com.gmail
Tue Sep 5 08:35:25 PDT 2006
Walter Bright wrote:
> Don Clugston wrote:
>> I noticed that DMD 0.166 accepts
>>
>> void func(lazy int delegate()[] ...)
>> {
>> }
>>
>> It's not documented -- what does it mean?
>>
>
> What it means is an array literal is created out of the arguments, which
> is then wrapped in a delegate.
>
> That cannot work until array literals are implemented.
Hum, that's odd, I was expecting that the "int delegate()" part would be
lazy, not the "int delegate()[]" .
Such that an "func(lazy int[] ...)" would do what currently is done with
this special-case:
function.html:
"If the variadic parameter is an array of delegates with no parameters.
void foo(int delegate()[] dgs ...);
Then each of the arguments whose type does not match that of the
delegate is converted to a delegate"
This special-case, besides being a bit inconsistent(it's a special case!
:p ), may also be a bit error prone, such as when a given non-delegate
argument is converted to a delegate under those rules, but an error
should have occurred instead (because the programmer made an error of
calling).
Oh, and there's an code typo in that section, namely:
int delegate[] dg;
foo(1, 3+x, dg, cast(int delegate[])null);
--
Bruno Medeiros - MSc in CS/E student
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
More information about the Digitalmars-d
mailing list