Compiler could elide many more postblit constructor calls

TommiT tommitissari at hotmail.com
Sun Jun 30 02:24:08 PDT 2013


On Sunday, 30 June 2013 at 08:59:14 UTC, anonymous wrote:
>
> void foo(const S s)
> {
>     data[0] = 42;
>     assert(s.values[0] == 1);
> }
>
> With the postblit, the assert holds. Without it, it would fail. 
> Isn't that problematic?

Ok, I see your point now. The function needs to be pure to elide 
postblit on a copy from a const variable to a const variable. The 
function doesn't need to be pure to elide postblit on a copy from 
immutable variable to const/immutable variable.

Although, if the compiler sees the function body, it could 
probably do some clever static analysis to see if it's possible 
that the const data is mutated, and elide the postblit if the 
answer is "no".


More information about the Digitalmars-d mailing list