Compiler could elide many more postblit constructor calls

Diggory diggsey at googlemail.com
Sun Jun 30 02:24:28 PDT 2013


> If this is indeed Diggory's point, it's not very pointy 
> (sorry). The compiler should be able to safely omit the 
> postblit on 's' when it passes it to foo (and the possible 
> destructor of foo's argument inside foo when foo exits).

If the postblit is omitted, and the function or code it calls 
accesses the const variable through a global mutable reference 
then that function will be able to see those changes despite the 
parameter being passed by value. Without this optimisation it 
would not be able to see the changes.


Also, the function needs to be strongly pure, not just weakly 
pure, otherwise the calling code could pass in both the const 
variable and a non-const reference to that variable. If the 
callee modifies the non-const reference it would see the changes 
to the const parameter which it shouldn't be able to do.


More information about the Digitalmars-d mailing list