Compiler could elide many more postblit constructor calls

TommiT tommitissari at hotmail.com
Sun Jun 30 08:34:59 PDT 2013


To take the full advantage of this optimization, a change in 
lambda function parameter type inference might be necessary, 
which sadly would be a breaking change:

struct S
{
     int get()
     {
         return 11;
     }

     int get() const
     {
         return 22;
     }
}

void main()
{
     S s;
     int n = (a) { return a.get(); }(s); // [1]
     writeln(n); // [2]
}

[1]: I think this lambda instantiates to something like:
int __fun(S a) { return a.get(); }
...but it'd be better if it first attempted to instantiate to:
int __fun(const S a) { return a.get(); }
...and resort to passing by mutable value only if the first 
attempt fails.

[2]: Currently prints 11, but would print 22 if this breaking 
change were made.


More information about the Digitalmars-d mailing list