rvalues -> ref (yup... again!)

Nick Sabalausky (Abscissa) SeeWebsiteToContactMe at semitwist.com
Sun Mar 25 02:45:33 UTC 2018


On 03/24/2018 03:03 AM, Jonathan M Davis wrote:
> On Saturday, March 24, 2018 01:37:10 Nick Sabalausky  via Digitalmars-d
> wrote:
>> Why require the callee's author to add boilerplate? Just do it for all
>> ref params that are given an rvalue.
> 
> Because if the point of the function accepting its argument by ref is
> because it's going to mutate the argument, then it makes no sense for it to
> accept rvalues, 

1. That *isn't* always the core point of a function which takes a 
non-const ref argument.

2. It's the caller who decides whether or not the ref-result is needed, 
not the callee.

3. The frequent recurring complaints about no rvalue references are a 
testament that this is too common a use-case for the current "manually 
insert temporaries" workaround to be satisfactory.

4. If the whole point of disallowing rvalue references is to prevent 
accidents due to callers not realizing a param is being passed by ref 
(as it sounds like you're suggesting), then it's nothing but a broken 
half-solution, because it fails to provide that safety (and thus fails 
its own charter) when that same caller, once again not realizing a param 
is ref, passes an *lvalue* without expecting it to change. *If* the 
problem we want to solve here really is making sure a caller knows when 
a param is ref, we've failed, and the only way to actually accomplish it 
is the C# approach: Require callers to mark their ref args with "ref" 
and raise an error when they don't.


More information about the Digitalmars-d mailing list