Unnamed parameter with default value

Maxim Fomin via Digitalmars-d digitalmars-d at puremagic.com
Tue Jun 17 10:28:21 PDT 2014


On Tuesday, 17 June 2014 at 15:15:44 UTC, Luís Marques wrote:
> Is there any particular reason why this is accepted? (I
> introduced it by mistake):
>
>      void foo(int = 3) {}
>
> I guess it could be useful to ensure binary compatibility when
> you expect to add the parameter later?

Actually there is nothing strange because current implementation 
technically does not remove variable names, it generates implicit 
ones. This compiles:

void foo(int = 0)
{
	_param_0 = 1;
}

and is equivalent to

void foo(int _param_0 = 0)
{
	_param_0 = 1;
}

It is not a wise design decision which is aimed to support some 
case, it is just technical consequence of implementation.

And I don't think that it has anything to do with binary 
compatibility, because both parameter names and default arguments 
exists only in compile time.


More information about the Digitalmars-d mailing list