[dmd-beta] rvalue references

Jason House jason.james.house at gmail.com
Tue Apr 10 20:36:31 PDT 2012


On Apr 10, 2012, at 8:57 PM, Walter Bright <walter at digitalmars.com> wrote:

> Our D solution, disallowing rvalue references, is technically sound but as we've discussed here is a usability disaster, and auto ref isn't going to cut it. We figured a solution is:
> 
> *** Allow rvalue references, however, disallow any implicit conversions of the literal's type in the process of taking a reference to it. ***
> 
> That takes care of 1 and 2. The solution to 3 is a bit more subtle. Some people have wondered why the D compiler can create reference types itself, but does not allow the user to outside of function parameters and foreach variables. This is the reason why. References, in order to be safe, must not be allowed to escape a scope. They can only be passed downward to enclosed scopes, and returned from functions where the return value is checked. Also, one cannot take the address of a reference. I think this closes the holes.
> 
> With all that, I intend to once again allow struct literals to be lvalues for 2.059. Somewhat later, also allow references to other literals like 0 and 5.6.

Sounds like a good change.

Just to be clear, ultimately all literals will be rvalues? Can rvalues be passed as const ref but not ref? I would assume the answer to both would be 'yes'.

While I have no plans to use it, what mechanism, if any, will allow escaping the address? Usually, casts are the back door, but I don't believe that works in this case.


More information about the dmd-beta mailing list