What to do about default function arguments

Timon Gehr timon.gehr at gmx.ch
Thu Apr 26 02:28:24 PDT 2012


On 04/26/2012 10:51 AM, Don Clugston wrote:
> On 26/04/12 05:44, Walter Bright wrote:
>> A subtle but nasty problem - are default arguments part of the type, or
>> part of the declaration?
>>
>> See http://d.puremagic.com/issues/show_bug.cgi?id=3866
>>
>> Currently, they are both, which leads to the nasty behavior in the bug
>> report.
>>
>> The problem centers around name mangling. If two types mangle the same,
>> then they are the same type. But default arguments are not part of the
>> mangled string. Hence the schizophrenic behavior.
>>
>> But if we make default arguments solely a part of the function
>> declaration, then function pointers (and delegates) cannot have default
>> arguments. (And maybe this isn't a bad thing?)
>
> I think it is a mistake to allow default arguments in function pointers
> and delegates (it's OK for delegate literals, there you have the
> declaration).

The parenthesised part is in conflict with your other statement.

> I don't see how it can possibly work.
>
> If it's really a type, then given:
> void foo(int x = 2) {}
> void bar(int y = 3) {}
> then typeof(&foo) should be: void function (int __param0 = 2)
> I don't see how we could justify having those types and not using them.
>
> But then, if you have:
> auto p = &foo; // p has default parameter of 2
> p = &bar; // Should this work?
>
> I really don't think we want this.
>

We probably don't.

>
> As I vaguely remember someone saying about the bug report, it looks like
> an attempt to have a pathetic special case of currying syntax sugar
> built into the language.

I don't see how it relates to currying.

> But it isn't even as efficient as a library solution (if the
> construction of the default parameter is expensive, it will generate
> gobs of code every time the function parameter is called).



More information about the Digitalmars-d mailing list