what means... auto ref Args args?

Jonathan M Davis newsgroup.d at jmdavisprog.com
Thu Oct 19 01:05:28 UTC 2017


On Thursday, October 19, 2017 00:00:54 Dave Jones via Digitalmars-d wrote:
> On Wednesday, 18 October 2017 at 22:16:32 UTC, Moritz Maxeiner
>
> wrote:
> > On Wednesday, 18 October 2017 at 21:38:41 UTC, Dave Jones wrote:
> >> Poking around in the source code for emplace and I noticed...
> >>
> >> T* emplace(T, Args...)(T* chunk, auto ref Args args)
> >>
> >> what does the "auto ref" do in this situiation? Cant seem to
> >> find any explanation in the docs.
> >
> > It means that any argument (that is an element of args) will be
> > passed by reference if and only if it's an lvalue (has a memory
> > address that can be taken) (it'll be passed by value otherwise).
> >
> > https://dlang.org/spec/template.html#auto-ref-parameters
>
> So it's just to make sure any "ref" in the eventual call to Ts
> constructor is also reflected in the call to emplace?

That's likely the main reason in this case, since losing the ref-ness could
definitely cause issues with some constructors, but auto ref is frequently
used simply to avoid copying lvalues while not requiring lvalues (since if
ref is used, the argument must be an lvalue, and if ref is not used, the
argument will be copied if it's an lvalue; it will be moved if it's an
rvalue). D never binds rvalues to ref like C++ does with const T&.

- Jonathan M Davis



More information about the Digitalmars-d mailing list