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

Reply via email to