Const ref and rvalues again...
Jonathan M Davis
jmdavisProg at gmx.com
Wed Oct 17 20:31:31 PDT 2012
On Thursday, October 18, 2012 05:07:52 Malte Skarupke wrote:
> My propsed solution is this:
> - Make functions that take "ref in" arguments also accept rvalues.
There was some discussion of this, though that seems to me to be basically the
same as making const ref take rvalues only worse. Certainly, it seems
inherently broken to me to have a function try and take its arguement by ref
and then be given an rvalue.
> - The user can still provide an overload that accepts an rvalue,
> using the "in" keyword, and that one will be preferred over the
> "ref in" version.
>
>
> What do you think?
in as alias for const scope. scope is generally not applicable to structs (and
when it is, it's not applied properly - scope currently only works properly
for delegates), and const just puts us back at const ref again. You appear to
be suggesting that in do something different here, and I don't think that that
works.
The most recent, in-depth discussion on this issue can be found here:
http://forum.dlang.org/thread/4F84D6DD.5090405@digitalmars.com
It wasn't entirely conclusive, but there _was_ some discussion on making ref
take rvalues. I believe that more research was necessary, and I'm not sure
where any of it stands now. One of the more promising ideas (IMHO) was to
simply change it so that auto ref means what it was supposed to mean
originally - that the programmer wants the argument to be passed efficiently but
doesn't care whether it's an lvalue or rvalue - but some people screamed about
that, because they've found the current version of auto ref to be useful (in
spite of the fact that it doesn't do what it was supposed to do).
Really, I think that this comes down to us needing to figure out how to make it
so that ref can take lvalues under at least some set of circumstances (which
seems like a bad idea to me), or we need to come up with a parameter attribute
which indicates that we don't want the argument copied and don't care if it's
an lvalue or rvalue (like const& is usually used for in C++ but making it so
that it's _exactly_ that rather than just being primarily used for that). And
if we can't use auto ref for that, then we need to come up with a new
attribute of some kind to do that. However, IIRC Kenji tried to change auto
ref to do that but ran into issues of some kind. I don't know where it stands
now.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list