rvalue references
Namespace
rswhite4 at googlemail.com
Sun Apr 28 01:43:03 PDT 2013
On Sunday, 28 April 2013 at 00:17:53 UTC, Jonathan M Davis wrote:
> On Saturday, April 27, 2013 13:11:54 Namespace wrote:
>> You often say that 'auto ref' can not work for non-templates.
>
> Please quote at least part of the message that you're replying
> to. The
> threading of the various clients is often wrong, and I have no
> way of knowing
> who you're talking to here (and some people don't use threading
> at all). Based
> on the content, I'm guessing that you're talknig to me, but I
> really don't
> know.
>
>> Why not really?
>> Because the resulting code bloat is not bearable, or because it
>> is technically not possible?
>
> Because the templated solution involves creating new functions,
> whereas that's
> not going to work for non-templated functions, particularly
> when you consider
> .di files and prototypes. It also gets particularly nasty when
> function
> overriding gets added into the mix. Walter himself has said
> several times in
> the past that the solution used for auto ref and templates
> can't work with
> non-templated functions.
>
>> Also I would like to see an answer of my overlooked question
>> (just out of curiosity):
>> http://forum.dlang.org/thread/kl4v8r$tkc$1@digitalmars.com?page=7#post-kyicm
>> dsriwnxqiuzkaho:40forum.dlang.org
>
> So, you're asking why the compiler can't just do a move in the
> rvalue case and
> pass by ref in the lvalue case for auto ref? The semantics are
> completely
> different. You need _one_ function, and you can't do that with
> one function.
> That would be like asking the function to be both
>
> auto foo(int* i) {...}
>
> and
>
> auto foo(int i) {...}
>
> only we're talking about ref rather than pointers (but ref is
> really a pointer
> underneat the hood). A function can only have one signature
> unless it's a
> template, and the only way that templates can have more is
> because they
> generate multiple functions (each with only one signature).
>
> Remember that we're dealing with the C linker here, so we're
> pretty much
> restricted to what you can ultimately do in C as far as
> function signatures
> go. We have to do name mangling to do function overloading or
> add additional
> information to function signatures (such as pure or nothrow),
> and the only
> information you ultimately have is the function signature, so
> anything
> requiring messing with how the function works either must be
> done inside the
> function (where it knows nothing about the caller), or you need
> multiple
> functions, which generally means templates. To get around all
> of that, we'd
> need to create our own linker which didn't work like C's linker
> does, which
> would create its own set of problems.
>
> - Jonathan M Davis
Sorry but you're right I meant you. Thanks for explanation.
More information about the Digitalmars-d
mailing list