new DIP38: Safe references and rvalue references without runtime checks.
deadalnix
deadalnix at gmail.com
Mon May 6 23:42:14 PDT 2013
On Tuesday, 7 May 2013 at 06:28:54 UTC, Timothee Cour wrote:
> Then all we need is to check whether the program typechecks
> under the
> following type conversion rules:
>
> global => outref //global: gc-allocated, static, etc.
> output of ref-return function call => outref
> outref 'dot' field => outref // field access
> local => inref
> global => inref
> outref => inref
> temporary => inref
>
Redundant rules should usually be avoided. For isntance, global
=> inref is pointless as global => outref => inref does it.
> Example1:
> ref T fooa(ref T t) { return t; }
> ref T bar() { T t; return fooa(t); }
> currently might compile, but has undefined behavior. Under the
> new
> rules (with ref meaning outref), it would not compile because
> of the
> illegal conversion local => outref when attempting to call
> fooa(t).
>
Prevent valid code like T t2 = fooa(fooa(t)); in bar.
More information about the Digitalmars-d
mailing list