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