rvalues -> ref (yup... again!)
kinke
noone at nowhere.com
Sat Mar 24 14:56:31 UTC 2018
On Saturday, 24 March 2018 at 13:49:13 UTC, Timon Gehr wrote:
> What I'm saying is that I don't really buy Jonathan's argument.
> Basically, you should just pass the correct arguments to
> functions, as you always need to do. If you cannot use the
> result of some mutation that you need to use, you will probably
> notice.
I agree, but restricting it to const ref would be enough for
almost all of my use cases. The MS C++ compiler just emits a
warning when binding an rvalue to a mutable ref ('nonstandard
extension used'), I'd find that absolutely viable for D too.
> There are only three sensible ways to fix the problem:
>
> 1. Just allow rvalue arguments to bind to ref parameters. (My
> preferred solution, though it will make the overloading rules
> slightly more complicated.)
I always thought the main concern was potential escaping refs to
the rvalue, which would be solvable by allowing rvalues to be
bound to `scope ref` params only. That'd be my preferred choice
as well.
> 2. Add some _new_ annotation for ref parameters that signifies
> that you want the same treatment for them that the implicit
> 'this' reference gets. (A close second.)
*Shudder*.
> 3. Continue to require code bloat (auto ref) or manual
> boilerplate (overloads). (I'm not very fond of this option, but
> it does not require a language change.)
While `auto ref` seems to have worked out surprisingly well for
code written in D, it doesn't solve the problem when interfacing
with (many) external C++ functions taking structs (represented in
D by structs as well) by (mostly const) ref. You're forced to
declare lvalues for all of these args, uglifying the code
substantially.
More information about the Digitalmars-d
mailing list