What to do about default function arguments
Steven Schveighoffer
schveiguy at yahoo.com
Thu Apr 26 06:14:47 PDT 2012
On Thu, 26 Apr 2012 09:08:07 -0400, Steven Schveighoffer
<schveiguy at yahoo.com> wrote:
> void main()
> {
> auto a = (int x = 1) { return x;};
> pure nothrow @safe int function(int) b = (int x) { return x;};
> pragma(msg, typeof(a).stringof);
> pragma(msg, typeof(b).stringof);
> b = a; // ok
> //a = b; // error
>
> //b(); // error
> }
>
> output:
>
> int function(int x = 1) pure nothrow @safe
> int function(int)
>
Nevermind, I just realized it was ignoring my pure nothrow @safe for the
declaration. Moving it after the declaration results in:
void main()
{
auto a = (int x = 1) { return x;};
int function(int) pure nothrow @safe b = (int x) { return x;};
pragma(msg, typeof(a).stringof);
pragma(msg, typeof(b).stringof);
}
output:
int function(int x = 1) pure nothrow @safe
int function(int x = 1) pure nothrow @safe
which clearly mimics the auto behavior. This is *really* no good, since
it seems to be ignoring the explicit type that I specified.
IMO, the correct solution is to make the default argument part of the type
(and don't let it affect things globally!), and make it derived from the
version without a default arg. I think Michel Fortin said the same thing.
-Steve
More information about the Digitalmars-d
mailing list