What to do about default function arguments

Don Clugston dac at nospam.com
Thu Apr 26 01:51:19 PDT 2012


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).
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.


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.
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