rvalue references

Jonathan M Davis jmdavisProg at gmx.com
Fri Apr 26 17:03:53 PDT 2013


On Friday, April 26, 2013 23:21:49 Diggory wrote:
> > You're just asking for bugs if you allow ref to accept rvalues.
> > We've had problems like this before when some literals were
> > treated as lvalues. The behavior of a function which takes its
> > argument by ref and the behavior of one which takes its
> > argument by auto ref are fundamentally different.
> 
> The only purpose of rvalue references is to allow the callee to
> mutate the value... Otherwise you would just use a const ref.

Except that const ref doesn't accept rvalues, and D's const is _far_ more 
restrictive than C++'s const, so requiring that a parameter be const in order 
to not care whether it's given an rvalue or lvalue but still pass it efficiently 
would be a major negative. auto ref doesn't require or imply const, and it 
shouldn't. Granted, it should be logically const, but that can't be guaranteed 
by the type system without guaranteeing physical constness, which is often too 
strong a requirement. So, it would be a big mistake to make it so that 
constness had anything to do with our solution for passing arguments efficiently 
without caring about refness.

- Jonathan M Davis


More information about the Digitalmars-d mailing list