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