structs are now lvalues - what is with "auto ref"?

Jonathan M Davis jmdavisProg at gmx.com
Sun Dec 23 19:28:52 PST 2012


On Monday, December 24, 2012 02:41:41 Namespace wrote:
> > Plenty of people are using it with the problems that it
> > currently has
> 
> But how long?
> 
> For the moment (or the next 2, 3 releases) it should be enough if
> I write
> void foo()(auto ref const Foo f) {
> instead of
> void foo(ref const Foo f) {
> 
> or is there any difficulty? After all it's a template now.

If you templatize a function, then you can use auto ref with it, and auto ref 
functions will work with both lvalues and rvalues without copying either. It 
basically creates two overloads - a ref and non-ref version. The ref version 
takes lvalues and obviously won't make copies. The non-ref version _might_ 
copy but shouldn't, because the compiler will generally move rvalues values 
rather than copying them.

- Jonathan M Davis


More information about the Digitalmars-d-learn mailing list