Settling rvalue to (const) ref parameter binding once and for all
martin
kinke at libero.it
Sat Nov 10 18:58:54 PST 2012
On Saturday, 10 November 2012 at 18:20:56 UTC, Manu wrote:
> Hear hear!
> I have dreams at night that look exactly like this proposal! :)
> I think I had one just last night, and woke up with a big grin
> on my face...
I'm glad I'm not alone on this. :)
>> 2) rvalues: prefer pass-by-value (moving: argument allocated
> directly on callee's stack (parameter) vs. pointer/reference
> indirection implied by pass-by-ref)
>
> Is this actually possible?
It surely is and would only require the compiler to map the
location of the parameter in the callee's future stack frame to
the caller's stack frame. I think this is how DMD implements it.
> Does the C/C++ ABI support such an action? GDC and LDC use the
> C ABI verbatim, so can this work, or will they have to, like
> usual, allocate on the caller's stack, and pass the ref
> through. I don't
> really see a significant disadvantage to that regardless.
I'm not sure how C++ does it, I was wondering about that too
actually after posting this. It quite possibly uses real
references for '(const) T&&' (otherwise how would you be able to
transform a passed lvalue reference to an rvalue reference via
std::move() without copying it?), so my table may be incorrect
for these 2 cells, although that wouldn't change anything really
for the proposal, unless someone showed a use case for 'const
T&&' where 'const T&' doesn't fit (I certainly can't think of
any).
More information about the Digitalmars-d
mailing list