[dmd-beta] rvalue references
Sean Kelly
sean at invisibleduck.org
Wed Apr 11 21:06:34 PDT 2012
On Apr 10, 2012, at 5:57 PM, Walter Bright wrote:
> I couldn't remember what the big problem was with rvalue references, and so I spent some time on the phone talking with Andrei about what exactly the problem is. They are:
>
> 1.
> C++:
> int i;
> double& d = i;
I'm shocked that this is legal. Why allow implicit conversions when assigning to a reference?
> Now d is referring to a temporary that has gone out of scope. This is, of course, a memory corrupting disaster, const ref or no const.
>
> 3. This one is a more general problem with references, that of escaping references to locals:
> double& d;
> void foo(double x, double y) {
> d = x + y;
> }
In C++, the temporary would persist if the reference were const, correct? How is this implemented, anyway?
> 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.
Seems entirely reasonable.
More information about the dmd-beta
mailing list